使用重命名工具重命名文件 - 围绕方括号移动

使用重命名工具重命名文件 - 围绕方括号移动

菜鸟问题。按照这个答案将文件名的最后部分移到前面,我正在尝试执行相同的操作,但我的情况下的所有文件都包含方括号。

我想要的是将标题移动到括号的另一侧(保留文件扩展名),因此:title ![s2_e2].mp4重命名为: [s2_e2]title !.mp4 第一部分可能包含感叹号和空格,但没有其他需要转义的字符。

我想出了这个,但它只删除文件名,直到第一个方括号:rename -n 's/^.*\[//' *

我走在正确的道路上吗?如何在 Linux 上使用 perl 重命名工具来完成它?

谢谢!

答案1

如果我理解正确,您需要将方括号内的任何文本移动到文件名的开头。假设文件名中只有一组方括号,您可以执行以下操作:

rename -n 's/(.*)(\[.+?\])/$2$1/s' *

在您的示例上运行此命令会给出:

$ rename -n 's/(.*)(\[.+?\])/$2$1/s' *
title ![s2_e2].mp4 -> [s2_e2]title !.mp4

答案2

我会在这里zsh使用zmv

$ autoload -Uz zmv # best in ~/.zshrc
$ zmv -n '(*)(\[*\])(*)' '$2$1$3'
mv -- 'title ![s2_e2].mp4' '[s2_e2]title !.mp4'

(如果文件名中有多于一对[/ ],它将把该对从最右边[至少有一个]跟随的 / 移动到最右边]。例如,在 中[a [b c]] [d [e]],这将移动[e]]

如今Perl 的变体如此之多rename,它们的陷阱也如此之多,以至于很难跟上它们的步伐。

zmv还实施了一些自己的保障措施。它会在开始之前检查是否有任何冲突任何重命名。

相关内容