求Mac系统下按指定规则批量重命名电影文件夹的终端脚本
批量重命名电影文件夹(Mac终端脚本)
需求回顾
我有数百部电影,每部单独存储在一个文件夹中。分类规则为:以ABCD命名的文件夹存放标题首字母为A、B、C、D的电影;其中电影文件夹格式如「Blade Runner 2049 (2017) 0526 20180223Eph」,0526是该文件夹的专属编号。需将所有此类文件夹重命名为「(0526) Blade Runner 2049 (2017) 20180223Eph」格式,部分文件夹无末尾后缀。
解决方案脚本
我给你准备了Mac终端可用的批量重命名脚本,建议先做预览测试,确认效果后再执行实际修改,避免误操作:
步骤1:切换到目标目录
打开终端,先导航到你的电影库根目录(也就是存放ABCD分类文件夹的上级目录):
cd /path/to/your/movie/library
步骤2:预览重命名效果(安全测试)
运行下面的命令,只会打印将要执行的重命名操作,不会实际修改文件夹名称:
find ./ABCD -type d -name "* [0-9][0-9][0-9][0-9] *" -o -name "* [0-9][0-9][0-9][0-9]" | while read dir; do # 提取纯文件夹名称(去掉路径前缀) dir_name=$(basename "$dir") # 用正则匹配并重组新名称 new_name=$(echo "$dir_name" | sed -E 's/^(.*) ([0-9]{4})( .*)?$/(\2) \1\3/') # 打印预览信息 echo "待重命名:$dir_name → $new_name" done
步骤3:执行实际重命名
如果预览结果完全符合你的预期,把上面脚本里的echo "待重命名:$dir_name → $new_name"替换成mv命令,执行实际修改:
find ./ABCD -type d -name "* [0-9][0-9][0-9][0-9] *" -o -name "* [0-9][0-9][0-9][0-9]" | while read dir; do dir_name=$(basename "$dir") new_name=$(echo "$dir_name" | sed -E 's/^(.*) ([0-9]{4})( .*)?$/(\2) \1\3/') # 执行重命名操作 mv "$dir" "$(dirname "$dir")/$new_name" done
脚本细节说明
find ./ABCD -type d:仅查找ABCD文件夹下的子文件夹,不会处理文件- 两个
-name参数:分别匹配带后缀(如xxx 0000 xxx)和不带后缀(如xxx 0000)的文件夹格式 sed正则:核心逻辑是提取4位数字的专属编号,放到最前面并加上括号,同时完整保留原有的电影标题、年份和后缀内容
重要注意事项
- 先备份:建议先复制几个测试文件夹,用脚本验证效果后再处理全部文件,防止意外损失
- 编号位数适配:如果你的专属编号不是4位数字,把脚本里的
[0-9]{4}改成对应位数(比如3位就改成[0-9]{3}) - 空格兼容:脚本中所有变量都用双引号包裹,确保带空格的文件夹名称能被正确识别处理
内容的提问来源于stack exchange,提问作者m nasdaq
相关产品推荐
相关产品推荐

