假设我有一个包含多个子目录的目录,每个子目录中都有许多文件。我希望检查哪些目录不包含特定的文件。例如,如果这些是我的目录:
dir/A:
foo
bar
dir/B:
bar
dir/C:
foo
dir/D:
dir/E:
foo
bar
如果我想列出所有不包含
foo
的目录,我将得到:dir/B
dir/D
可以使用Unix的find
命令来实现吗?还是需要使用其他工具?
find . -type d \! -exec test -e '{}/foo' \; -print
将 foo
替换为你要查找的文件名。1 - 在当前目录(或您的路径中的某个位置)创建一个简单的一行脚本。我们将其命名为check.sh
:
cd "$1" && [[ ! -f "$2" ]] && pwd
2 - 给上述脚本赋予执行权限:
chmod +x ./check.sh
3 - 最后使用此查找命令:
find . -maxdepth 1 -type d -exec ./check.sh '{}' foo \;
comm -3 <(find -type d) <(find -name foo -printf '%h\n')
foo
的目录ls | xargs -I dir ls dir/foo > /dev/null
ls */foo
会默默地跳过不匹配的目录(不包含“foo”的目录),因此使用xargs
将强制它在不包含foo的目录上向我们输出到stderr。然后只需丢弃stdout,就可以看到我们要找的内容了。
./
?因为如果我需要将这些子目录复制到另一个目录,那么./
的存在会对此造成不利影响。 - rambalachandran