如何在Mac终端(Unix)用mv批量移除文件名扩展名前的指定字符?
解决Mac终端无rename命令时的批量重命名问题
没问题,我来帮你搞定这个批量重命名需求!既然Mac默认没有rename命令,咱们用mv配合shell循环就能轻松实现,这里给你两种思路,推荐更通用的那一种:
方法一:按下划线分割(推荐)
你的文件名格式是DTMxxx_xxxxxx-xxxxxx.fq,核心是提取下划线之前的前缀部分,再加上.fq后缀。用bash的参数扩展就能快速实现:
# 先测试命令(不会实际修改文件,仅预览操作) for f in DTM*.fq; do echo mv "$f" "${f%%_*}.fq"; done
执行后会打印出将要执行的重命名操作,比如:
mv DTM001_ACGGT-TTAGGC.fq DTM001.fq
mv DTM156_GGTTG-ACAGTG.fq DTM156.fq
确认输出符合预期后,去掉echo执行实际重命名:
for f in DTM*.fq; do mv "$f" "${f%%_*}.fq"; done
命令解释
for f in DTM*.fq:遍历当前目录下所有以DTM开头、.fq结尾的文件${f%%_*}:bash参数扩展语法,意思是从文件名末尾开始,删除最长的_*匹配内容,也就是去掉第一个下划线及后面的所有字符,只保留DTMxxx部分- 最后加上
.fq就得到了目标文件名
方法二:固定移除末尾13个字符(适配你的初始思路)
如果你确定要移除扩展名前的最后13个字符,也可以用这个方法(依赖文件名后缀前的字符长度固定为13):
# 先测试 for f in DTM*.fq; do echo mv "$f" "${f%?????????????.fq}.fq"; done
同样,确认后去掉echo执行:
for f in DTM*.fq; do mv "$f" "${f%?????????????.fq}.fq"; done
命令解释
${f%?????????????.fq}:这里的%是从文件名末尾匹配内容,13个?代表13个任意字符,加上.fq,删除这部分后再补回.fq,就实现了移除扩展名前13个字符的效果
两种方法都能达到你的需求,更推荐方法一,因为它不依赖后面字符的固定长度,兼容性更强~
内容的提问来源于stack exchange,提问作者ems
相关产品推荐
相关产品推荐

