将文件名的前 x 个字符移动到末尾

将文件名的前 x 个字符移动到末尾

我有一堆文件或任意长度的文件。我需要将文件名的前 10 个字符移动到文件名末尾,就在扩展名之前。

如果我必须使用该rename命令,我该如何进行重命名,如下所示,

1234567890name.extname1234567890.ext abcdefdhijklmnopqrst.extklmnopqrstabcdefghij.ext

我还想知道如何实现反向操作,即取扩展名前的最后 x 个字符并将其放在名称的开头。

name1234567890.ext1234567890name.ext klmnopqrstabcdefghij.extabcdefdhijklmnopqrst.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.ext1234567890-name.ext,请使用:

rename 's/^(.*?)(-?)(.{10})(\.ext)$/$3$2$1$4/' name-1234567890.ext

这也适用于name1234567890.ext

演示与说明

相关内容