求助:在Bash中批量移除文件名中间字符及扩展名
Bash批量重命名文件方案
你的需求是把类似TS_01_001_21.0.tif的文件名改成TS_01_21.0,核心是移除中间的三位字符段和.tif扩展名。可以基于你已有的代码扩展,用Bash内置的参数扩展或者cut命令实现,两种方法都高效易用:
方法一:纯Bash内置参数扩展(无需额外工具)
直接在循环里加上替换逻辑,把文件名里的_XXX_(XXX为三位任意字符)替换成_,再移除扩展名:
for f in *.tif;do # 先替换中间的_XXX_为_,再移除.tif扩展名 mv "${f}" "${f//_???_/_%.tif}" done
如果想更精确匹配中间的三位数字(避免意外替换其他字符),可以把匹配规则改成数字专属:
for f in *.tif;do mv "${f}" "${f//_[0-9][0-9][0-9]_/_%.tif}" done
方法二:用cut命令拆分字段
利用cut按下划线分割文件名,提取第1、2、4段(跳过中间的第3段),再完成重命名:
for f in *.tif;do # 先去掉扩展名,再用cut提取需要的字段 new_name=$(echo "${f%.tif}" | cut -d'_' -f1,2,4) mv "${f}" "${new_name}" done
安全提示
批量重命名前,建议先把mv换成echo,比如echo "${f}" -> "${new_name}",先预览所有文件名的变化,确认没问题再执行实际重命名,避免误改文件。
内容的提问来源于stack exchange,提问作者hackrabbit
相关产品推荐
相关产品推荐

