如何在特定文件擴展名上遞歸使用 grep

如何在特定文件擴展名上遞歸使用 grep

grep 是一個很棒的 Linux 文件搜索和標準輸入工具,可以匹配字符串和正則表達式模式。但是,有時需要控制grep 要查找的文件,為此它具有內置標誌。

在 grep 搜索中僅包含特定文件

默認情況下,如果您使用遞歸 標誌grep 調用它,它將搜索給定文件夾及其子文件夾中的所有文件。-r這將拿起一切,但如果你只想要某些擴展,你會想要使用的選項是--include.

該標誌--include指定grep僅包含與特定模式匹配的文件。如果指定,grep 所有啟用的標誌將被視為白名單。您可以將它與任何Linux glob 字符(例如通配符)一起使用,以匹配所有內容,包括特定的擴展名:

grep -inr --include \*.txt "foo"~/folder

請注意,這是用斜杠轉義的\ ,因為文件名中可能有星號。您還可以指定幾個--include 標誌,例如在 wwwroot 中搜索所有 HTML、JS 和 CSS 源文件:

grep -inr --include \*.html --include \*.css --include \*.js "foo"~/folder

同樣,您還可以排除某些仍匹配除 glob 之外的任何文件名的文件名,充當現有配置之上的黑名單:

grep -inr --exclude \*.txt "foo"~/folder

還有一個標誌可以一次排除整個目錄:

grep -inr --exclude-dir config "foo"~/folder

改用搜索

或者,如果您更願意使用find 文件查找實用程序,您可以將其連接到grep 頻道和文件xargs。 find 可以使用模式和正則表達式進行搜索,並具有許多優勢,包括能夠根據元數據(如大小、創建和修改日期以及其他 Linux 標識符)輕鬆過濾文件。

該命令有點愚蠢,因為您需要-print0 在最後find 使用打印單行列表,然後xargs -0 來回傳遞它grep 。

 find. / -type f -iname "*.txt"-print0 | xargs -0 grep "foo"

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *