根據程式從 unix find 命令中排除/包含文件

根據程式從 unix find 命令中排除/包含文件

我想知道是否有任何方法可以根據另一個程式的輸出或退出程式碼從 find(1) 的結果中包含或排除檔案。具體來說,我希望能夠運行 find(1) ,以便它只傳回那些包含正規表示式正匹配的檔案。

我意識到這可以透過將 find(1) 的輸出透過egrep 來完成,但我希望能夠在 find(1) 中完成這一切。

例如,是否有任何方法可以將以下內容轉換為一次呼叫 find(1) 而不使用任何管道?

find . [test] | xargs egrep -l [regex]

答案1

-exec如果命令傳回零(成功),則計算結果為「true」:

find . -type f -exec egrep -qs "regex" {} \; -print

替換-print為您選擇的操作。


但是,請考慮這種方式egrep執行一次每個文件。比較:

等於 ~/code $ time find -type f -exec grep -qs bin/env {} \; -列印|廁所-l
60

實際0米0.760秒
用戶0m0.104s
系統0m0.596s

等於 ~/code $ time find -type f -print0 | xargs -0 egrep -l bin/env | xargs -0 egrep -l bin/env | xargs -0 egrep -l bin/env |廁所-l
60

實際0m0.021s
用戶0m0.003s
系統0m0.023s

(在一個相當小的 Git 儲存庫上測試,300 個文件,約 2.6 MB。)

相關內容