使用模板產生文件時,在模板中包含模板名稱非常重要。當讀取生成的文件時,它可以幫助您找到用於生成它的模板。
我想搜尋目錄中不包含自己的檔案名稱的所有模板,列印我找到的模板,如果找到任何模板,則以非零程式碼退出。
到目前為止,這就是我想到的。
find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;
這會成功找到並列印文件,但無論是否找到任何文件,它都會以 0 退出代碼退出。如何找到相關文件並在找到任何文件時以非零代碼退出?
答案1
如何找到相關文件並在找到任何文件時以非零代碼退出?
將結果透過管道傳輸到grep ''
.該工具不會改變文字流,但它會產生退出狀態0
或1
取決於是否有任何行通過它。
我知道你想要另一種方式。如果我是你,我會適應這種行為grep
。我的理由是:你想知道符合你標準的文件;該命令找到了它們,所以它成功查找是否至少有一個文件。
然而,如果你堅持相反的行為,只需取消退出狀態。例子:
! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''
請注意,我已sh
在 內部調試了您的調用find
。如果{}
擴展到./a;rm -rf ~;.xyz
(它是許多 Linux 檔案系統中的有效檔案名稱),您原來的方法將會適得其反。
答案2
也許類似的東西grep .... && <do if found> || <do if not found>
可以工作
答案3
for f in *.xyz; do
grep -q $f $f || echo "$f does not contain itself"
done
它會給你你正在尋找的文件列表,儘管它仍然返回零(因為回顯成功)。