快速查詢多個檔案方法
Contents
快速查詢多個檔案方法
有時候工作上會突然拿到一大串編號、檔名或訂單號,接著被要求去一堆資料夾裡面把對應檔案找出來。這種時候如果還一個一個手動找,效率會很差。早期我也只是把一長串 find -regex 記起來,但後來發現還是需要把思路整理清楚,之後才不會每次都重查一次。
這篇把幾個常用方向分開來看:找檔名、找檔案內容、找壓縮檔裡面的內容。
先分清楚你要找的是什麼
通常需求會分成 3 種:
- 我知道部分檔名,要找出哪些檔案存在。
- 我知道關鍵字,要找哪些檔案內容有出現。
- 我連壓縮檔也要一起查。
不同情境適合的指令不太一樣,不一定都該用 find。
1. 找檔名:find
如果你手上有很多編號,想知道哪些檔案名稱有對到,find 搭配 regex 很實用。
|
|
上面這種寫法適合一次找很多代碼,但可讀性很差。實務上如果條件很多,我通常會把代碼清單另外整理成檔案,再用腳本組 regex,會比手打安全很多。
如果只是簡單關鍵字,其實用 -name 或 -iname 會更直覺:
|
|
2. 找內容:grep 或 rg
如果你是要找檔案內容,而不是檔名,grep 或 rg 會更適合。
例如:
|
|
或用比較快的 rg:
|
|
rg 在大量檔案下通常比傳統 grep -R 快很多,也比較適合平常開發時用。
globstar 大法
有些 Shell 可以開 globstar,讓 ** 做遞迴匹配,例如:
|
|
這種寫法在快速查詢時也不錯,但前提是 Shell 有支援,而且同事也看得懂,不然可維護性不一定比 find 高。
直接找 zip 檔案內容
- Linux find 實用指令筆記 | 程式狂想筆記
- linux bash / shell 有關 * 星號的事情 | 程式狂想筆記
- How can I view the contents of tar.gz file without extracting from the command-line? - Ask Ubuntu
- linux - How to find the string in the list of .gz files? - Unix & Linux Stack Exchange
- 查詢有壓縮(gz)日誌 log 方法 | 程式狂想筆記
如果是 .gz 這種壓縮檔內容,建議直接用 zgrep:
|
|
如果是 tar.gz,可以先列內容,不一定要先解壓:
|
|
我自己的選擇順序
現在如果遇到查很多檔案,我大概會這樣選:
- 找檔名:find
- 找內容:rg
- 查 .gz:zgrep
- 查 tar.gz 內清單:tar -tzf
這樣分開思考,比把所有需求都硬塞進一條超長指令清楚很多。
小結
快速查詢多個檔案這件事,關鍵不是背一條很長的指令,而是先判斷你到底在找檔名還是找內容。能把這個問題拆開,後面選 find、grep、rg、zgrep 才會比較準,也比較不容易在壓力下打錯。