以递归方式列出子目录

时间:2018-03-09 17:04:36

标签: bash shell

我想编写一个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

我该怎么做?

3 个答案:

答案 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 {} \;