You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动