Mac OS X批量重命名文件异常求助(Bash脚本问题)
解决Mac Bash下文件重命名的字符替换问题
嘿,这个问题我碰到过!你用tr命令出错的原因很简单:tr是做单个字符的替换,不是字符串替换。你的命令tr 'edf' '.edf'会把每个e换成.,每个d换成e,每个f换成d,所以原来的018edf就变成了018.ed,自然少了最后一个f。
下面给你几个靠谱的解决方案,都是适配Mac Bash环境的:
方法一:用Bash内置的参数扩展(推荐,无需外部工具)
这是最简洁可靠的方式,利用Bash自带的字符串处理功能:
# 只匹配以edf结尾的文件,避免误操作其他文件 for f in *edf; do # 试运行,确认没问题后去掉echo echo mv "$f" "${f%edf}.edf" done
${f%edf}的作用是去掉文件名末尾的edf字符串,然后我们手动加上.edf,完美得到你想要的格式。- 循环用
*edf而不是*,能避免处理其他无关文件,更安全。
方法二:用sed做字符串替换
如果你习惯用文本处理工具,sed可以实现精准的字符串替换(区别于tr的字符替换):
for f in *edf; do echo mv "$f" "$(echo "$f" | sed 's/edf$/.edf/')" done
sed 's/edf$/.edf/'的意思是:匹配行尾($)的edf字符串,替换成.edf,确保只修改文件名最后的后缀部分。
方法三:用BSD rename命令(Mac自带)
Mac自带的BSD版本rename也能搞定,一行命令就行:
# 试运行的话可以加-n参数,比如 rename -n 's/edf$/.edf/' *edf rename 's/edf$/.edf/' *edf
- 加
-n参数可以先预览修改结果,确认无误后再去掉-n执行。
最后提醒
不管用哪种方法,先通过echo或者rename -n做试运行,确认生成的文件名完全符合要求后,再去掉预览相关的部分,执行真实的重命名操作哦!
内容的提问来源于stack exchange,提问作者Markys




