递归重命名匹配正则表达式的子目录

Den*_*ote 13 shell directory regular-expression rename

我有一个媒体服务器,其中有一个名为Series. ( /media/Expansion2/Series/)

在里面,我有(惊喜!)电视剧。这些只是节目名称,例如,/media/Expansion2/Series/The Big Bang Theory/

在每个节目的文件夹内(这就是问题所在)我有季节文件夹。我目前混合了以下两种约定(可能还有更多约定):

  1. /media/Expansion2/Series/The Big Bang Theory/The Big Bang Theory Season 1
  2. /media/Expansion2/Series/The Big Bang Theory/Season 2

最后,我想将所有文件夹重命名为Season #.

作为正则表达式,我可能会说类似的话 s/.*(Season \d)/$1

仅适用于文件夹,不适用于文件。我可能还应该提到这是用于大约 50 多个显示子文件夹,因此它需要从/media/Expansion2/Series/级别开始并查看每个系列:)

use*_*own 13

在 Debian 和衍生产品(包括 Ubuntu)上:

find /media/Expansion2/Series/ -type d -exec rename -n 's/.*(Season \d)/$1/' {} ";"
Run Code Online (Sandbox Code Playgroud)

rename命令是 Perl 包的一部分。它不是由其他发行版提供的,而是提供了标准的 Linuxrename在这里没有用命令。

如果rename -n(-不是真的)显示了它想要做的事情,并且这对您来说没有问题,请省略 -n 并使其发生。