Grep
如何在整個文件系統中搜尋文本?
假設應該使用 grep 工具,我想在整個文件系統中搜尋文本字元串“800x600”。
我試過了:
grep -r 800x600 /
但它不起作用。
我認為我的命令應該做的是遞歸地遍歷根目錄下的所有文件/文件夾中的文本“800x600”並列出搜尋結果。
我究竟做錯了什麼?
我通常使用這種風格的命令來執行
grep
多個文件:find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
這實際上做的是列出系統上的每個文件,然後對於每個文件,
grep
使用給定的參數和每個文件的名稱執行。該
-xdev
參數告訴 find 它必須忽略其他文件系統——這有利於避免特殊文件系統,例如/proc
. 但是,它也會忽略正常的文件系統 - 例如,如果您的 /home 文件夾位於不同的分區上,則不會搜尋它 - 您需要說find / /home -xdev ...
.
-type f
意味著只搜尋文件,因此目錄、設備和其他特殊文件被忽略(它仍然會遞歸到目錄中並grep
在其中的文件上執行 - 它只是不會grep
在目錄本身上執行,這無論如何都不起作用)。以及告訴它始終在其輸出中列印文件名的-H
選項。grep
find
接受各種選項來過濾文件列表。例如,-name '*.txt'
僅處理以 .txt 結尾的文件。-size -2M
表示小於 2 兆字節的文件。-mtime -5
表示最近五天內修改過的文件。將這些與 -a for and和 -o for or連接在一起,並使用'('
括號')'
對錶達式進行分組(用引號括起來以防止 shell 解釋它們)。例如:find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
看看
man find
以查看可能的過濾器的完整列表。