![使用重命名工具重命名文件 - 围绕方括号移动](https://linux22.com/image/201993/%E4%BD%BF%E7%94%A8%E9%87%8D%E5%91%BD%E5%90%8D%E5%B7%A5%E5%85%B7%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20-%20%E5%9B%B4%E7%BB%95%E6%96%B9%E6%8B%AC%E5%8F%B7%E7%A7%BB%E5%8A%A8.png)
菜鸟问题。按照这个答案将文件名的最后部分移到前面,我正在尝试执行相同的操作,但我的情况下的所有文件都包含方括号。
我想要的是将标题移动到括号的另一侧(保留文件扩展名),因此: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
还实施了一些自己的保障措施。它会在开始之前检查是否有任何冲突任何重命名。