列出不包含文件的目录

我已经看到类似的问题,但没有find与文件直接相关的问题。

有没有办法给我一个不包含特定文件的目录列表?

例:

/dir1/good /dir1/stuff /dir2/junk /dir2/morejunk /dir3/good /dir4/junk 

我想运行一个find命令,我只返回不包含文件“good”(dir2和dir4)的目录名称。 有没有find方法或一些组合来做到这一点? 我现在唯一能做的就是运行一个find的文件“good”,保存这个输出并使用awk,sort和comm-3命令来获得我需要的diff。

有没有更简单的方法来做到这一点?

你可以使用-exec test ...来检查目录中是否存在该文件

 find /path/to/search -type d \! -exec test -e '{}/good' \; -print 

你可以用find和GNU parallel轻松地做到这一点:

 $ file=foo && find . -type d | parallel -j+0 "[ -f {}/$file ] || echo $file not in {}" 

该命令通过将当前目录下的每个目录进行并行处理。 然后并行启动并行作业来检查每个目录中的文件foo,并在该目录中不存在文件时打印消息。