Grep

如何在整個文件系統中搜尋文本?

  • December 28, 2021

假設應該使用 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以查看可能的過濾器的完整列表。

引用自:https://unix.stackexchange.com/questions/16138