5

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

dir/A:
    foo
    bar
dir/B:
    bar
dir/C:
    foo
dir/D:
dir/E:
    foo
    bar

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

dir/B
dir/D

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

4

4 回答 4

7

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

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

你在哪里替换foo你正在寻找的任何文件。

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

于 2013-04-26T15:57:47.427 回答
0

派对有点晚了,这里有一个应该可以工作的单线:

ls | xargs -I dir ls dir/foo > /dev/null

诀窍是它ls */foo会默默地传递不匹配的目录(不包含 'foo' 的目录),因此 using将强制它在不包含 foo 的目录上xargs向我们提供输出到stderr 。然后只需丢弃标准输出即可查看我们正在寻找的内容。

于 2014-05-02T20:11:45.253 回答
0
comm -3 <(find -type d) <(find -name foo -printf '%h\n')
  • 获取所有目录
  • 仅获取包含的目录foo
  • 比较,只打印差异
于 2013-04-25T22:12:25.270 回答
0

1 - 在当前目录(或路径中的某处)中创建一个简单的 1 衬里脚本。让我们命名它check.sh

cd "$1" && [[ ! -f "$2" ]] && pwd

2 - 授予上述脚本执行权限:

chmod +x ./check.sh

3 - 最后使用这个 find 命令:

find . -maxdepth 1 -type d -exec ./check.sh '{}' foo \;
于 2013-04-25T22:17:57.900 回答