列出不包含文件的目录

列出不包含文件的目录

我见过类似的问题,但没有找到与文件直接相关的内容。

有什么办法可以给我提供不包含特定文件的目录列表吗?

例子:

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

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

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

答案1

您可以使用来-exec test ...检查目录中是否存在文件 good 例如

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

答案2

您可以使用 find 轻松完成此操作GNU并行

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

该命令的工作原理是将当前目录下的每个目录都输入到 parallel 中。然后 Parallel 启动并行作业来检查每个目录中的文件 foo,如果目录中不存在该文件,则打印一条消息。

相关内容