Linux 指令搜尋多個檔案內容
Contents
在 Linux 上排錯時,很常遇到「我要去一堆檔案裡面找同一段字」這種需求。這時候如果只會一個一個開檔搜尋,速度會很慢。通常比較實用的做法是把 find 和 grep 搭起來,或直接用 grep -r。
先分清楚檔名搜尋和內容搜尋
這裡最容易搞混的是:
find擅長找檔案本身。grep擅長找檔案內容。
所以如果需求是「找出內容裡有某個字串的檔案」,通常不會只用 find,而是 find 負責篩檔案,grep 負責查內容。
標準寫法
|
|
例如:
|
|
這表示:
- 先在
/var/log找出所有.log檔。 - 對每個找到的檔案執行
grep。 -H讓結果帶出檔名,方便知道是哪一個檔案命中。
另一種更常用的方式
如果你只是想遞迴搜尋某個目錄底下的內容,其實 grep -r 通常更簡潔:
|
|
這種寫法平常很夠用,而且可讀性也比 find -exec 高。
什麼時候用哪一個
我自己的判斷方式:
- 檔案條件很多,先用
find篩比較靈活。 - 只是單純遞迴查內容,用
grep -r比較快。
如果工作區有 rg 可用,很多情況甚至會直接改用 rg,速度通常更好。
常見踩雷點
1. 以為 find 本身能搜內容
find 找的是檔案屬性和路徑,不是文字內容。真正搜內容還是要靠 grep。
2. 沒有限制檔案類型
如果目錄很大,沒有用 -name 或 --include 先收斂範圍,搜尋會慢很多,還可能掃到不必要的二進位檔。
小結
Linux 搜尋多個檔案內容的核心思路很簡單:先決定是用 find 篩檔案,再交給 grep 查內容;或者直接用 grep -r 遞迴搜。把這個分工想清楚,之後遇到大量日誌、設定檔或程式碼排查時會順很多。