報帳缺收據明細?五份只搜出三份,fd 要怎麼找齊
重點摘要
- 自製10,007檔樣本含5份收據CSV,預設搜尋找到3份,加-H找到4份,加-HI找到5份。
- 兩份繁中收據檔名均被找到;另加CSV限制後留下1份。
- memo.txt僅內文含receipt,未出現在receipt檔名搜尋結果中。
- 主樣本搜尋前後10,007個檔案的數量、相對路徑與SHA256均相同。
- 結論: 本次樣本加-HI後找到全部5份CSV,預設只找到3份。
- 適合: 已會使用終端機、要依檔名片段找資料的人;此做法已找到5份樣本明細。
- 不適合: 只記得檔案內文的人;本次內文含receipt的memo.txt未被列出。
| 實測項目 | 結果 |
|---|---|
| 主樣本檔案總數 | 10007 |
| 預設CSV收據搜尋 | 3 |
| 含隱藏CSV搜尋(-H) | 4 |
| 含隱藏且取消忽略(-HI) | 5 |
| 五次重跑秒數 | [0.006568, 0.006816, 0.007128, 0.007101, 0.006875] |
| 繁中收據檔名搜尋 | 2/2 |
| 繁中收據搜尋加CSV限制 | 1 |
| 主樣本完整性 | 檔數、路徑、SHA256相同 |
準備報帳,記得曾經存過一份交通費明細,卻想不起它在哪個月份的資料夾。檔名只記得一小段,逐層打開資料夾又很煩。這次用 fd 試一個具體問題:明明放了五份收據明細,為什麼第一次只找到三份?資料沒有消失,搜尋範圍才是關鍵。
測試設備是 Mac mini M4 Pro,12 核心、64GB 記憶體。受測的是 fd-find 8.6.0-3,執行檔顯示 fdfind 8.6.0,並非最新版。README 查閱版本為 41ee5e954c55dd4b212a7ed2ed7ad6c9779a63b2;這個 commit 代表文件依據,不是所裝套件的原始碼版本。安裝與版本確認的工具紀錄合計約 2.5 秒,不等於單獨下載耗時。
先把問題做成可核對的樣本
全部素材都是自製假資料:一萬份文字筆記、五份收據 CSV、一份忽略規則與一份內文提到 receipt 的筆記,共 10,007 個檔案。CSV 只有示範欄位與假金額,不是真實收據。三份明細在一般資料夾,一份在 .backup,另一份放進 archive;.ignore 裡寫了 archive/。
依 README 使用套件安裝方式,再替名稱加上連結,後面的指令才可直接寫 fd:
apt-get update -qq
apt-get install -y -qq fd-find
fdfind --version
ln -sf /usr/bin/fdfind /usr/local/bin/fd
這是本次實際使用的安裝方式,請先確認自己的套件名稱、安裝路徑與權限;錄影用的乾淨目錄才建立這個連結;已有同名檔案時不要覆蓋,可直接用 fdfind 取代後面的 fd。搜尋時先移到要整理的資料夾,限定只找 CSV 檔,不必把所有筆記都列出來。
cd /tmp/find-receipts
fd --color never -t f -e csv receipt
fd --color never -H -t f -e csv receipt
fd --color never -HI -t f -e csv receipt

| 搜尋方式 | 本次找到 |
|---|---|
| 預設 | 3 份 CSV |
| 加上 -H,包含隱藏檔 | 4 份 CSV |
| 加上 -HI,另取消忽略規則 | 5 份 CSV |
-H 把隱藏檔納入,-I 取消忽略規則。這份樣本的五份 CSV 全都找回,不代表 fd 會復原已刪除的檔案,也不代表權限不足的目錄能讀取。用預設選項沒看到結果時,應先檢查範圍,再判斷檔案是否真的不在。

找檔名,和找內文是兩回事
memo.txt 內文雖然寫著 receipt,搜尋 receipt 時仍沒列出它,因為這裡比對的是檔名。若只記得文件內一句話,這條指令無法回答。另建三份繁中檔名樣本,搜尋「收據」找到兩份;再限定 CSV,只留下其中一份。這是兩個指定檔名的結果,不能推論所有編碼或特殊符號都沒問題。
五次重跑完整搜尋,分別約 0.006568、0.006816、0.007128、0.007101、0.006875 秒。這是一萬份小檔案、已經讀取過的樣本,包含快取效果;沒有測整顆硬碟或網路磁碟,也沒有量人工整理時間,不能宣稱省下幾小時。主樣本搜尋前後的檔案數、相對路徑與 SHA256 全部一致,搜尋過程沒有改寫它們。
我的結論是:已經會用終端機、常常整理下載與封存資料的人,值得記住這組指令。若只想用滑鼠搜尋,或需要比對文件內文,這次的做法就不適合。它的價值在於少翻資料夾,但要先知道自己實際搜尋了哪些範圍。
專案:sharkdp/fd。原始碼提供 MIT/Apache-2.0 雙授權,詳見專案的 LICENSE-MIT 與 LICENSE-APACHE。