GNU find - 列出不包含名为 foo 的子目录的目录

GNU find - 列出不包含名为 foo 的子目录的目录

我拥有的:

我使用以下命令创建了以下文件结构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”时才打印目录名称。

相关内容