我想编写一个shell脚本,以递归方式列出包含NEW子目录的所有不同子目录(NEW是固定名称)。
Dir1/Subdir1/Subsub1/NEW/1.jpg
Dir1/Subdir1/Subsub1/NEW/2.jpg
Dir1/Subdir1/Subsub2/NEW/3.jpg
Dir1/Subdir1/Subsub2/NEW/4.jpg
Dir1/Subdir2/Subsub3/NEW/5.jpg
Dir1/Subdir2/Subsub4/NEW/6.jpg
我想要
Dir1/Subdir1/Subsub1
Dir1/Subdir1/Subsub2
Dir1/Subdir2/Subsub3
Dir1/Subdir2/Subsub4
我该怎么做?
答案 0 :(得分:2)
find . -type d -name NEW | sed 's|/NEW$||'
---编辑---
对于你的评论,sed没有-print0。有很多方法可以做到这一点(大多数都是错误的)。一种可能的解决方案是:
find . -type d -name NEW -print0 | \
while IFS= read -rd '' subdirNew; do \
subdir=$(sed 's|/NEW$||' <<< "$subdirNew"); \
echo "$subdir"; \
done
应该容忍文件名中的空格和换行符
答案 1 :(得分:1)
ls -R
将以递归方式列出内容。
find . | grep "/NEW/"
的应该为您提供所需的列表类型。
答案 2 :(得分:1)
你可以试试这个:
find . -type d -name "NEW" -exec dirname {} \;