如何通过交换文件名中的子字符串来批量重命名文件?

如何通过交换文件名中的子字符串来批量重命名文件?

我有诸如ABC_asd_f.txt, DEF_qwe_r.txt, ...之类的文件

如何将第一个下划线之前的大写字母与之后的小写字母交换?于是就ABC_asd_f.txt变成了asd_f_ABC.txtDEF_qwe_r.txt变成了qwe_r_DEF.txt,...

答案1

使用 perl 重命名。首先使用-n旗帜进行预演。

rename -n 's/^(...)_(..._.)/$2_$1/' *

然后,如果你高兴的话,就真正运行它。

rename 's/^(...)_(..._.)/$2_$1/' *

解释

这使用捕获组。

  • rename 's/foo/bar/' *: 替换foobar所有文件*
  • ^(...)_(..._.):从行首开始^,捕获前三个字符(...),跳过_,然后捕获接下来的五个字符,其中第四个是下划线(..._.)
  • $2_$1:用相反的捕获组替换上面的字符串(即第二个,下划线,然后是第一个)。

重命名版本

renameLinux 领域有两个s。您可以使用以下命令判断它是否是 perl 重命名

$ rename --version
perl-rename 1.9

另一种会给出不同的结果。

$ rename --version
rename from util-linux 2.28

相关内容