我拥有的:
我使用以下命令创建了以下文件结构mkdir dir{1..5} && mkdir dir{1,3,4}/foo
├── dir1
│ └── foo/
├── dir2
├── dir3
│ └── foo/
├── dir4
│ └── foo/
└── dir5
我想要的是:
我想使用GNUfind
命令列出不包含该foo/
目录的目录。
到目前为止我唯一的想法:
$ find . -type d -name 'foo' -exec dirname {} \; && echo '---' && find . -maxdepth 1 -type d
./dir1
./dir4
./dir3
---
.
./dir1
./dir4
./dir3
./dir2
./dir5
然后手动比较它们,但一定有更好的方法!
答案1
您可能只需要使用您的 shell(这是 GNUbash
或更好的 shell,例如zsh
您有权访问 GNU find
,很可能)来遍历该目录:
# /-----+----- "for" loop: for iteration variable chosen from list after "in"
# | |
# | /-------- iteration variable is called "dir"
# | | |
# | | | /-- choose from list of all directories
# | | | |
# v v v v
for dir in */ ; do
[[ -d "${dir}/foo" ]] || echo "${dir}"
# ^^ ^^ ^^ ^^
# \ | / |
# --------+-------- |
# | | |
# | \------------- [[ ]] : check for condition
# | |
# \------------------- -d : condition "path exists and is directory"
# |
# \- || if condition fails, do what is after this
done
答案2
find . -type d -a ! -exec /usr/bin/test -e "{}/foo" \; -print
仅当目录中没有“foo”时才打印目录名称。