我有一堆文件或任意长度的文件。我需要将文件名的前 10 个字符移动到文件名末尾,就在扩展名之前。
如果我必须使用该rename
命令,我该如何进行重命名,如下所示,
1234567890name.ext
至name1234567890.ext
abcdefdhijklmnopqrst.ext
至klmnopqrstabcdefghij.ext
我还想知道如何实现反向操作,即取扩展名前的最后 x 个字符并将其放在名称的开头。
name1234567890.ext
至1234567890name.ext
klmnopqrstabcdefghij.ext
至abcdefdhijklmnopqrst.ext
答案1
该rename
命令使用 Perl 正则表达式,您可以执行:
rename 's/^(.{10})(.*)(\.ext)$/$2$1$3/' 1234567890name.ext
解释:
s/ # substitute
^ # beginning of string
(.{10}) # group 1, 10 any characters
(.*) # group 2, 0 or more any characters
(\.ext) # group 3, a dot and extention
$ # end of string
/ # with
$2 # content of group 2
$1 # content of group 1
$3 # content of group 3
/ # end substitute
反向命令是:
rename 's/^(.*?)(.{10})(\.ext)$/$2$1$3/' name1234567890.ext
根据评论更新。
如果您还想重命名name-1234567890.ext
为1234567890-name.ext
,请使用:
rename 's/^(.*?)(-?)(.{10})(\.ext)$/$3$2$1$4/' name-1234567890.ext
这也适用于name1234567890.ext