使用 find 搜索并报告内部包含一个但不包含两个关键字的文件

使用 find 搜索并报告内部包含一个但不包含两个关键字的文件

我想在以下条件下使用 find 来报告文件:

  1. 如果文件包含单词“Serializable”
  2. 如果该文件不包含“serialVersionUID”一词,则报告该文件

就像是:

find . -name "*.java" -exec grep "Serializable" {} \; <magic stuff here> grep "serialVersionUID" {} \; -print

那么我是不是在吸可卡因并且 awk 会更好呢?

感谢您的帮助。

答案1

的操作数-execfind计算结果为真的如果命令成功(即返回零)并且错误的如果失败(返回非零),那么您可以使用 的成功/失败grep作为 所使用的表达式的一部分find

find's!操作数一起,您可以搜索一个 grep 命令成功而另一个 grep 命令失败的文件:

find . -name "*.java" \
    -exec grep -q "Serializable" {} ";" -a \
    ! -exec grep -q "serialVersionUID" {} ";" -a -print

-q选项指示grep不打印任何内容;我们只对其返回值感兴趣。

操作数不是严格必需的,但它不会减慢速度,当表达式可能变得更加复杂并需要括号-a时,我喜欢使用它。-o

相关内容