在find中排除不包含特定文件名的目录?

srs*_*son 5 unix find

假设我有一个包含许多子目录的目录,每个子目录中都包含许多文件.我想检查哪些目录不包含特定文件.例如,如果这些是我的目录:

dir/A:
    foo
    bar
dir/B:
    bar
dir/C:
    foo
dir/D:
dir/E:
    foo
    bar
Run Code Online (Sandbox Code Playgroud)

如果我想列出所有不包含的目录foo,我会得到:

dir/B
dir/D
Run Code Online (Sandbox Code Playgroud)

是否可以使用unix执行此操作find,还是需要使用某些备用工具?

srs*_*son 7

经过一番研究后,我找到了一个很好的解决方案:

find . -type d \! -exec test -e '{}/foo' \; -print

在哪里替换foo您正在寻找的任何文件.

这将打印出所有目录的列表,这些目录不包含您要查找的任何文件.