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

macOS Bash递归给指定扩展名的文件夹添加前缀

给.abc后缀的文件夹批量添加前缀问题

需求:给带有.abc扩展名的文件夹(类似macOS中.app格式的应用包)添加前缀,将OldFileName.abc重命名为AAA_OldFileName.abc,目标文件夹位于/Users/iPPi/PhotoLR的各级子目录中。

尝试的错误脚本:

find /Users/iPPi/PhotoLR -type d -iname '*.abc' |     while read d; do
  echo mv "$d" "AAA_${d%.abc}"
  mv "$d" "AAA_${d%.abc}"
done

问题分析

你的脚本错误在于${d%.abc}会移除整个路径末尾的.abc,导致新路径变成AAA_/Users/iPPi/PhotoLR/xxx/OldFileName——这相当于把文件夹挪到了错误位置,还丢失了.abc后缀。正确逻辑应该是只给文件夹的名称部分添加前缀,保留原路径和后缀。

正确实现方法

方法1:拆分路径与文件名

通过dirname和basename拆分路径和文件名,单独修改文件名部分:

find /Users/iPPi/PhotoLR -type d -iname '*.abc' | while read -r d; do
  # 获取文件夹所在的父目录
  parent_dir=$(dirname "$d")
  # 获取文件夹的原始名称(包含.abc后缀)
  original_name=$(basename "$d")
  # 拼接新名称
  new_name="AAA_$original_name"
  # 先输出测试命令,确认无误再执行实际重命名
  echo mv "$d" "$parent_dir/$new_name"
  # 去掉下面的注释执行实际操作
  # mv "$d" "$parent_dir/$new_name"
done

方法2:用find的-execdir选项(推荐)

-execdir会自动进入目标文件夹的父目录执行命令,直接操作文件名即可,更简洁可靠:

# 先执行测试命令,确认输出的重命名逻辑正确
find /Users/iPPi/PhotoLR -type d -iname '*.abc' -execdir echo mv '{}' 'AAA_{}' \;

# 确认无误后,去掉echo执行实际重命名
# find /Users/iPPi/PhotoLR -type d -iname '*.abc' -execdir mv '{}' 'AAA_{}' \;

注意事项

  • 务必先执行带echo的测试命令,确认输出的重命名路径完全符合预期后,再去掉echo执行实际操作,避免误修改文件位置。
  • 如果需要区分大小写匹配(只找.abc而不是.ABC),把-iname换成-name即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:28:25