Grep
管道查找到 grep -v
我正在嘗試查找特定類型且不包含特定字元串的所有文件。我正在嘗試通過管道查找到 grep -v
例子:
find -type f -name '*.java' | xargs grep -v "something something"
這似乎不起作用。它似乎只是返回 find 命令找到的所有文件。我要做的基本上是找到與某個文件名匹配的所有 .java 文件(例如,以 SessionPb.java 中的“Pb”結尾)並且其中沒有“extendsSomethingSomething”。
我的懷疑是我做錯了。那麼命令應該是什麼樣子呢?
這裡沒有必要
xargs
。您還需要使用grep
with-L
選項(不匹配的文件),否則它將輸出文件內容而不是其名稱,就像在您的範例中一樣。find . -type f -iname "*.java" -exec grep -L "something somethin" {} \+
你真的差不多了…
find . -type f -iname "*.java" -print0 | xargs -0 grep -v "something something"
點“。” 說從這裡開始。(你的暗示它..但永遠不要假設)。
-iname使用不區分大小寫的搜尋,以防萬一(或不區分大小寫)。
-print0將帶有尾隨 \x00 字元的文件名發送到 xargs,這可以防止文件名中包含空格的問題。
xargs 上的“-0”表示期望以 \x00 結尾的文件名而不是返回。
和你的 grep 命令…
差不多明白了。
編輯::
從您的更新:
find . -type f -iname "*pb.java" -print0 | xargs -0 grep -iL "something"
應該有幫助。(從@rush的回答中添加了-L,幹得好)
我知道您的 grep 需要“-i”選項,或者不那麼明確。
嘗試部分命令… THIS 輸出的文件名是否正確?
find . -type f -iname "*pb.java"
如果是這樣,那麼您的問題可能是您的 grep 搜尋模式不匹配(拼寫錯誤?它發生了!),或者沒有任何匹配項。
絕對最壞的情況:
grep -riL "something" *
將做更多的工作來搜尋所有內容,但應該會給你一些輸出。