You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash移除文件名指定字符串失败,求正确解决方案

解决util-linux版rename修改文件名失败的问题

你用的是util-linux 2.23.2版本的rename工具,这个版本和常见的Perl版rename语法完全不同,你之前写的Perl风格正则替换命令自然不会生效。

问题原因

Perl版rename支持's/正则表达式/替换内容/'的写法,但util-linux版rename是简单的字符串替换工具,语法为:

rename [选项] 待替换的字符串 替换后的字符串 目标文件

它不支持Perl正则语法,所以你之前的两条命令都会执行失败。

两种可行解决方案

方案1:用bash循环+mv命令(推荐,一次到位)

利用bash的参数扩展功能,直接提取文件名中第一个.之前的部分:

for file in *; do
  mv -v "$file" "${file%%.*}"
done
  • ${file%%.*}是bash内置的参数处理逻辑:%%表示从字符串末尾开始,删除最长的匹配.*的内容,也就是直接去掉第一个.及之后的所有字符,正好得到你想要的文件名。

方案2:用util-linux版rename分两步操作

如果一定要用rename工具,可以分两次替换:

  1. 先去掉末尾的.vesta-01:2,:
rename -v '.vesta-01:2,' '' *

执行后文件名会变成1667874526.M308257P1693这类格式。
2. 再去掉.开头的剩余部分:

rename -v '.M*' '' *

这样就能得到最终的1667874526格式文件名。

内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:15:29