请求优化Bash脚本:按修改日期重命名MP3并添加递增后缀
按修改日期批量重命名MP3并添加递增后缀
你的脚本存在几个关键问题:
- bash中变量赋值无需
set命令,计数器递增的语法错误 - 文件存在判断逻辑错误,未考虑完整的目标文件名格式
- 全局计数器无法实现同一日期内的独立递增
以下是修正后的脚本,使用关联数组按日期维护独立计数器,确保同一修改日期的文件后缀从1开始递增:
cd "/volume1/music/" # 声明关联数组,用于存储每个日期的当前计数 declare -A date_counter for file in *.mp3; do # 获取文件的修改日期(格式YYYYMMDD) cdate=$(date -r "$file" +"%Y%m%d") # 如果该日期还没有计数器,初始化为1 if [[ -z "${date_counter[$cdate]}" ]]; then date_counter[$cdate]=1 fi # 构建新文件名 new_name="${cdate}_${date_counter[$cdate]}.mp3" # 先打印命令确认(测试阶段用,确认无误后去掉echo) echo mv "$file" "$new_name" # 当前日期的计数器加1,为下一个同日期文件做准备 ((date_counter[$cdate]++)) done
说明
- 关联数组
date_counter会为每个修改日期单独记录当前的后缀数字,避免不同日期的文件互相干扰 - 测试阶段保留
echo,可以先查看所有重命名操作是否符合预期,确认后再删除echo执行实际重命名 - 如果目录中存在子目录,
*.mp3只会匹配当前目录下的MP3文件,不会递归处理子目录
内容的提问来源于stack exchange,提问作者HTM
相关产品推荐
相关产品推荐

