You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用find、sed和mv递归移除子目录名称中的指定字符

在BSD系统递归重命名目录移除名称中的0(使用find/sed/mv)

可行的单条命令解决方案

你可以通过find结合sh -c一次性处理所有匹配的子目录,无需逐个操作。针对你的需求,完整命令如下:

find . -depth -type d -name "foobar 0*" -exec sh -c '
  new_path=$(echo "$1" | sed "s/0//")
  mv -v "$1" "$new_path"
' _ {} \;

命令详解

  • find . -depth -type d -name "foobar 0*":
    • 递归查找当前目录下所有名称以foobar 0开头的目录(匹配foobar 01/foobar 02等目标目录);
    • -depth参数确保find先处理最深层的子目录,避免因父目录提前改名导致后续路径失效。
  • -exec sh -c '...' _ {} \;:
    • 为每个找到的目录启动独立shell进程执行重命名逻辑;
    • {}代表当前找到的目录完整路径,_是shell脚本的$0占位符(仅满足语法要求,无实际功能)。
  • new_path=$(echo "$1" | sed "s/0//"):
    • 将原路径$1通过sed移除单个0字符(如果需要移除名称中所有0,可改为s/0//g);
    • 双引号包裹变量避免路径中的空格导致参数拆分错误。
  • mv -v "$1" "$new_path":
    • 执行重命名操作,-v参数会打印每一步的重命名结果,方便确认操作正确性。

安全测试建议

在执行实际重命名前,建议添加echo预览将要执行的操作,避免误改:

find . -depth -type d -name "foobar 0*" -exec sh -c '
  new_path=$(echo "$1" | sed "s/0//")
  echo mv "$1" "$new_path"
' _ {} \;

确认输出的重命名命令符合预期后,再去掉echo执行实际操作。

内容的提问来源于stack exchange,提问作者Terry Bishop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:17:27