我有一个目录,其中包含数千个名称相同的文件
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
一旦您确认它正常工作,请将其移除。