更改所有文件名(前缀改为后缀)

更改所有文件名(前缀改为后缀)

我有一个目录,其中包含数千个名称相同的文件

t_00xx_000xxx.png

我想把他们的名字改成00xx_000xxx_t.png

因此,取前缀并将其作为后缀,这是否可以只用一个命令完成

答案1

这是可能的rename命令:

首先检查完成(通过提供-n)。如果看起来不错,请放下-n并再次运行:

rename -n 's/t_(.+)\.png$/$1_t.png/' *.png  # check only
rename    's/t_(.+)\.png$/$1_t.png/' *.png  # actually rename the files

答案2

如果前缀用下划线 ( _) 分隔,则可以执行以下操作:

rename -n 's/^([^_]*)_(.*)\.(.*)$/$2_$1.$3/' file(s)

它可以与任何前缀和任何扩展一起使用。

-n如果您对结果满意,请删除以执行重命名。


解释:

  • s/search_pattern/replace_pattern/

搜索模式:

  • ^- 匹配文件名的开头
  • ([^_]*)- 匹配任何非下划线的字符[^_]*并将其捕获为$1 (...)
  • _- 匹配第一个下划线
  • (.*)\.(.*)- 匹配.*最后一个字符之前和之后的任何字符.并将其捕获为$2$3.必须转义 因为它是 Regex 中的特殊字符 -->\.
  • $- 匹配行尾

替换模式:

  • $2_$1.$3- 从搜索模式捕获“Filename_Prefix.Extension”。

答案3

mmv(可从universe存储库获得)非常适合这种事情,简单的 shell globs 而不是正则表达式就可以完成工作

前任。

mmv -n -- '*_*_*.png' '#2_#3_#1.png'
t_00xx_000xxx.png -> 00xx_000xxx_t.png

-n一旦您确认它正常工作,请将其移除。

相关内容