我见过类似的问题,但没有找到与文件直接相关的内容。
有什么办法可以给我提供不包含特定文件的目录列表吗?
例子:
/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,如果目录中不存在该文件,则打印一条消息。