bash - 递归列出子目录

标签 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

我怎样才能做到这一点?

最佳答案

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

它应该容忍文件名中的空格和换行符

关于bash - 递归列出子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49198709/

相关文章:

windows - 在与 ssh + Bash 一起使用并在本地与 Git 一起使用的 Windows Powershell 中设置 TERM 环境变量?

bash - 如何从用 bash 编写的 CGI 脚本中获取 POST 参数?

linux - 检查是否存在与目录同名的文件

bash - 将标准输入的副本从 bash 脚本本身重定向到文件

bash - 如何在脚本继续执行其他命令时使 osascript 显示对话框

bash - 如何使用 bash 脚本从用户输入中定义别名?

linux - 如何使用 shell 脚本在多个 csv 文件的末尾添加列

linux - 如何使用换行符或制表符或空格来 grep 多行字符串

Bash - 从 ffmpeg 获取时差 - 音频和视频合并

linux - 递归脚本中的目录深度