如何查找不包含自身文件名的文件

如何查找不包含自身文件名的文件

使用模板生成文件时,在模板中包含模板名称非常重要。读取生成的文件时,它可以帮助您找到用于生成该文件的模板。

我想搜索目录中所有不包含自己文件名的模板,打印找到的模板,如果找到则以非零代码退出。

到目前为止,这就是我所想到的。

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

它会为您提供您正在寻找的文件列表,但它仍然返回零(因为回显成功)。

相关内容