在 Linux 上通过命令行使用正则表达式批量重命名目录

Yem*_*lat 4 linux debian command-line-interface rename batch

我在服务器上有一个文件夹,其中包含每天创建并按日期命名的目录,如下所示:

07-06-14
08-06-14
09-06-14
Run Code Online (Sandbox Code Playgroud)

等等。

在某些时候,我决定首选命名格式如下:2014-06-07 并且新文件夹使用该格式创建。所以现在该文件夹包含:旧格式的目录和新格式的目录。

如何将旧格式的目录批量重命名为新格式?

我试过这个: rename -n 's/(\d{2})\-(\d{2})\-(\d{2})\20$3-$2-$1//' *

但它抛出错误: Use of uninitialized value $2 in regexp compilation at (eval 1) line 1

Tho*_*hor 7

你的正则表达式坏了,我想你的意思是这样的:

's/(\d{2})-(\d{2})-(\d{2})/20$3-$2-$1/'
Run Code Online (Sandbox Code Playgroud)

即连字符不需要转义,第二个斜线不合适。

请注意,通过此替换,您还将使用新命名方案重命名文件。您可能想要锚定正则表达式。这样的事情应该工作:

rename -n 's/^(\d{2})-(\d{2})-(\d{2})$/20$3-$2-$1/' *
Run Code Online (Sandbox Code Playgroud)

  • @YemSalat:`-n` 选项告诉 `rename` 进行试运行,因此您可以看到将进行哪些更改。删除它以实际实现它们。 (2认同)