首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用/usr/bin/rename使用regex重命名多个文件

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

Stack Overflow用户
提问于 2011-10-17 22:41:16
回答 2查看 7.5K关注 0票数 2

我有很多pdfs文件,我想用/usr/bin/rename来重命名。

这些文件的命名方式如下:

代码语言:javascript
复制
<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

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

代码语言:javascript
复制
<author>, <year> <rating> <a pretty long title>.pdf
e.g.: Dude, 1999 +++ The discovery of some very interesting stuff.pdf

我尝试使用/usr/bin/rename,并编写了以下命令:

代码语言:javascript
复制
rename  's/(.*)\ (.*)\ \((.*)\ (.*)\).pdf/$3, $4 $1 $2.pdf/' *.pdf

但是,该命令并不认为评级始终包含'+‘符号,并且年份始终是数字。我如何才能做到这一点?我尝试了像([+]{1,5})([0-9]{4})这样的东西,但它不起作用。

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

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-17 22:58:28

这对我来说很好:

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

..。然而,您的问题没有引用错误消息,因此很难判断在您的情况下可能出现了什么问题。

作为警告,在Linux系统上有两个不同版本的/usr/bin/rename,它们有不同的语法。但是,我假设您使用的是Perl one,因为您的原始命令根本不起作用。这意味着您可以使用任何Perl表达式来修改名称-有关更多详细信息,请参阅perlre

票数 4
EN

Stack Overflow用户

发布于 2015-03-27 01:22:55

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

但我已经将其更改为perl版本的replace实用程序。

您可以在CPAN get和untar归档中找到它,然后:

代码语言:javascript
复制
# ./Build installdeps
# sudo ./Build install

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7795400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档