如何尋找不包含自己文件名稱的文件

如何尋找不包含自己文件名稱的文件

使用模板產生文件時,在模板中包含模板名稱非常重要。當讀取生成的文件時,它可以幫助您找到用於生成它的模板。

我想搜尋目錄中不包含自己的檔案名稱的所有模板,列印我找到的模板,如果找到任何模板,則以非零程式碼退出。

到目前為止,這就是我想到的。

find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;

這會成功找到並列印文件,但無論是否找到任何文件,它都會以 0 退出代碼退出。如何找到相關文件並在找到任何文件時以非零代碼退出?

答案1

如何找到相關文件並在找到任何文件時以非零代碼退出?

將結果透過管道傳輸到grep ''.該工具不會改變文字流,但它會產生退出狀態01取決於是否有任何行通過它。

我知道你想要另一種方式。如果我是你,我會適應這種行為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

它會給你你正在尋找的文件列表,儘管它仍然返回零(因為回顯成功)。

相關內容