我有一个如下所示的目录结构:
.
??? Untitled Folder
? ??? Untitled Folder
? ? ??? zing
? ? ??? first
| | | ??? dum
? ? ??? second
? ? ??? third
? ??? Untitled Folder 2
? ??? Untitled Folder 3
??? Untitled Folder 2
? ??? Untitled Folder
? ??? Untitled Folder 2
? ? ??? zing
? ? ??? fifth
| | | ??? dum
? ? ??? fourth
? ? ??? sixth
? ??? Untitled Folder 3
??? Untitled Folder 3
??? Untitled Folder
??? Untitled Folder 2
??? Untitled Folder 3
??? zing
??? eighth
??? seventh
??? dum
Run Code Online (Sandbox Code Playgroud)
我只想列出所有zing
目录的直接子目录。
示例输出为:
first
second
third
fifth
fourth
sixth
eighth
seventh
Run Code Online (Sandbox Code Playgroud)
我试过
% find . -type d | grep zing
./Untitled Folder 3/Untitled Folder 3/zing
./Untitled Folder 3/Untitled Folder 3/zing/eigthth
./Untitled Folder 3/Untitled Folder 3/zing/seventh
./Untitled Folder 3/Untitled Folder 3/zing/seventh/dum
./Untitled Folder 2/Untitled Folder 2/zing
./Untitled Folder 2/Untitled Folder 2/zing/fifth
./Untitled Folder 2/Untitled Folder 2/zing/fifth/dum
./Untitled Folder 2/Untitled Folder 2/zing/fourth
./Untitled Folder 2/Untitled Folder 2/zing/sixth
./Untitled Folder/Untitled Folder/zing
./Untitled Folder/Untitled Folder/zing/first
./Untitled Folder/Untitled Folder/zing/first/dum
./Untitled Folder/Untitled Folder/zing/third
./Untitled Folder/Untitled Folder/zing/second
Run Code Online (Sandbox Code Playgroud)
它甚至显示了我不想要的zing
(在这种情况下dum
)的孩子的孩子。
我怎样才能得到我的预期输出?
Bash、Globstar 已激活(使用shopt -s globstar
)。
printf '%s\n' **/zing/*/
Run Code Online (Sandbox Code Playgroud)
仅对于最后一个路径组件,
for dir in **/zing/*/; do basename "$dir"; done
Run Code Online (Sandbox Code Playgroud)
POSIX 查找。
find . -type d -path '*/zing/*' -prune
Run Code Online (Sandbox Code Playgroud)
-prune
避免在匹配的目录中降序。
仅对于最后一个路径组件,
find . -type d -path '*/zing/*' -prune -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)