使用模板生成文件时,在模板中包含模板名称非常重要。读取生成的文件时,它可以帮助您找到用于生成该文件的模板。
我想搜索目录中所有不包含自己文件名的模板,打印找到的模板,如果找到则以非零代码退出。
到目前为止,这就是我所想到的。
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
它会为您提供您正在寻找的文件列表,但它仍然返回零(因为回显成功)。