使用regex使用/ usr / bin / rename重命名多个文件

时间:2011-10-17 14:41:16

标签: regex linux bash rename

我有很多pdf要用/usr/bin/rename重命名。

文件以下列模式命名:

<rating> <a pretty long title> (<author> <year>).pdf
e.g.: +++ The discovery of some very interesting stuff (Dude 1999).pdf

rating: 1 to 5 '+' signs
year: numerical

应将它们重命名为以下模式:

<author>, <year> <rating> <a pretty long title>.pdf
e.g.: Dude, 1999 +++ The discovery of some very interesting stuff.pdf

我尝试使用/usr/bin/rename并编写了这个命令:

rename  's/(.*)\ (.*)\ \((.*)\ (.*)\).pdf/$3, $4 $1 $2.pdf/' *.pdf

但是,该命令不会认为评级始终包含“+”符号,并且年份始终为数字。我怎样才能做到这一点?我尝试了类似([+]{1,5})([0-9]{4})的内容,但它没有用。

rename是否真的能够解释(.*)以外的其他内容作为变量$1 ... $n的输入?

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

这对我来说很好用:

rename 's/(\+{1,5}) (.*) \((.*) ([0-9]{4})\).pdf/$3, $4 $1 $2.pdf/' -- \
    'Dude, 1999 +++ The discovery of some very interesting stuff.pdf'

...但是你的问题没有引用错误信息,因此很难说出你的情况可能出现什么问题。

正如警告一样,有两个不同版本的/usr/bin/rename在Linux系统上广泛使用,并且具有不同的语法。我假设您使用的是Perl,因为您的原始命令完全有效。这意味着您可以使用任何Perl表达式来修改名称 - 有关详细信息,请参阅perlre

答案 1 :(得分:0)

不幸的是,Fedora(这是我的发行版)有一个毫无价值的重命名版本。

但是我已经为perl版本的replace实用程序更改了它。

您可以在CPAN找到它 得到和解压档案然后:

# ./Build installdeps
# sudo ./Build install

!!!它的动作取代原来的fedora重命名:bin文件和手册,但它可以通过yum重新安装恢复,并可能在下一个fedora更新时恢复 您也可以单独安装或使用替代品。