我想在以下条件下使用 find 来报告文件:
- 如果文件包含单词“Serializable”
- 如果该文件不包含“serialVersionUID”一词,则报告该文件
就像是:
find . -name "*.java" -exec grep "Serializable" {} \; <magic stuff here> grep "serialVersionUID" {} \; -print
那么我是不是在吸可卡因并且 awk 会更好呢?
感谢您的帮助。
答案1
的操作数-exec
的find
计算结果为真的如果命令成功(即返回零)并且错误的如果失败(返回非零),那么您可以使用 的成功/失败grep
作为 所使用的表达式的一部分find
。
与find
's!
操作数一起,您可以搜索一个 grep 命令成功而另一个 grep 命令失败的文件:
find . -name "*.java" \
-exec grep -q "Serializable" {} ";" -a \
! -exec grep -q "serialVersionUID" {} ";" -a -print
该-q
选项指示grep
不打印任何内容;我们只对其返回值感兴趣。
操作数不是严格必需的,但它不会减慢速度,当表达式可能变得更加复杂并需要括号-a
时,我喜欢使用它。-o