首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在linux中使用正则表达式重命名文件

在linux中使用正则表达式重命名文件
EN

Stack Overflow用户
提问于 2012-08-04 23:13:29
回答 3查看 92.8K关注 0票数 73

我有一组文件,命名如下:

代码语言:javascript
复制
Friends - 6x03 - Tow Ross' Denial.srt
Friends - 6x20 - Tow Mac and C.H.E.E.S.E..srt
Friends - 6x05 - Tow Joey's Porshe.srt

我想重命名它们,如下所示

代码语言:javascript
复制
S06E03.srt
S06E20.srt
S06E05.srt

我应该怎么做才能在linux终端上完成这项工作?我已经安装了重命名,但使用以下命令时出现错误:

代码语言:javascript
复制
rename -n 's/(\w+) - (\d{1})x(\d{2})*$/S0$2E$3\.srt/' *.srt
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-04 23:31:59

你在星号前面忘了一个点:

代码语言:javascript
复制
rename -n 's/(\w+) - (\d{1})x(\d{2}).*$/S0$2E$3\.srt/' *.srt

在OpenSUSE、RedHat、Gentoo上,你必须使用rename的Perl版本。This answer展示了如何获取它。在Arch上,这个包被称为perl-rename

票数 90
EN

Stack Overflow用户

发布于 2015-05-18 19:17:02

并不是每个发行版都提供了支持上面示例中使用的正则表达式的rename实用程序- RedHat、Gentoo及其衍生工具等等。

可以尝试使用的替代方案是perl-renamemmv

票数 9
EN

Stack Overflow用户

发布于 2020-12-08 05:27:18

我认为最简单也是最通用的方式是使用for loopsedmv。首先,您可以检查管道中的正则表达式替换:

代码语言:javascript
复制
ls *.srt | sed -E 's/.* ([0-9])x([0-9]{2}) .*(\.srt)/S\1E\2\3/g'

如果它打印出正确的替换,只需使用mv将其放入for loop

代码语言:javascript
复制
for i in $(ls *.srt); do 
    mv $i $(echo $i | sed -E 's/.* ([0-9])x([0-9]{2}) .*(\.srt)/S\1E\2\3/g') 
    done
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11809666

复制
相关文章

相似问题

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