我想知道是否有任何方法可以根據另一個程式的輸出或退出程式碼從 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。)