如何使用Shell脚本重命名目录下未知名称的唯一.MP3文件
错误原因
你使用的变量替换语法${file/.MP3/news.mp3}的逻辑是将原文件名中匹配到的.MP3子串替换为news.mp3,如果原文件名为daily_podcast_20240520.MP3,替换后会得到daily_podcast_20240520news.mp3,就是你遇到的名称拼接问题。
修正脚本
因为你确认目录下仅有一个.MP3后缀的目标文件,直接指定目标文件名即可,脚本修正如下:
#!/bin/sh for file in *.MP3; do # 添加--避免文件名以-开头时被mv识别为命令参数 mv -- "$file" "news.mp3" done
更稳妥的增强版本
如果要避免目录下出现多个.MP3文件时误操作,可以添加数量判断逻辑:
#!/bin/sh # 统计当前目录下.MP3文件数量,不递归子目录 mp3_count=$(ls *.MP3 2>/dev/null | wc -l) if [ "$mp3_count" -eq 1 ]; then mv -- *.MP3 news.mp3 else echo "当前目录.MP3文件数量不符合预期,未执行重命名操作" fi
内容的提问来源于stack exchange,提问作者jules_bike
相关产品推荐
相关产品推荐

