条件语句:查找不包含特定文件的文件夹

条件语句:查找不包含特定文件的文件夹

我需要查找名称中包含数字且不包含以 .counts.txt 结尾的文件的所有文件夹。通过结合我在网上找到的几个建议,我能够想出以下命令(针对 bash),它可以实现我想要的功能。

find . maxdepth 1 -type d -name "*[0-9]*" ! -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \; -print

但是,我不明白它的一些功能:

  1. 这里的感叹号有什么作用呢?它是否以某种方式否定了后面的条件语句?
  2. 为什么需要使用sh而不是直接通过管道打开一个新的外壳ls

答案1

  1. 是的,它!否定了下一个条件,即-exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \;.由于这是一个-exec被否定的条件,我们必须记住,如果它执行的命令返回状态 0,则为真(如果状态不为 0,则否定条件为真)。
  2. 之后的参数-exec不会传递给 shell,而是直接执行,因此不存在可用管道的概念。如果您将管道字符放在那里,外壳(开始查找自身)将使用它并且全部find 的输出将发送到egrep。

man find参阅 参考资料 中的文档!-exec查找参数。

相关内容