我有一组文件,命名如下:
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
我想重命名它们,如下所示
S06E03.srt
S06E20.srt
S06E05.srt
我应该怎么做才能在linux终端上完成这项工作?我已经安装了重命名,但使用以下命令时出现错误:
rename -n 's/(\w+) - (\d{1})x(\d{2})*$/S0$2E$3\.srt/' *.srt
发布于 2012-08-04 23:31:59
你在星号前面忘了一个点:
rename -n 's/(\w+) - (\d{1})x(\d{2}).*$/S0$2E$3\.srt/' *.srt
在OpenSUSE、RedHat、Gentoo上,你必须使用rename
的Perl版本。This answer展示了如何获取它。在Arch上,这个包被称为perl-rename
。
发布于 2015-05-18 19:17:02
并不是每个发行版都提供了支持上面示例中使用的正则表达式的rename
实用程序- RedHat、Gentoo及其衍生工具等等。
可以尝试使用的替代方案是perl-rename
和mmv
。
发布于 2020-12-08 05:27:18
我认为最简单也是最通用的方式是使用for loop
、sed
和mv
。首先,您可以检查管道中的正则表达式替换:
ls *.srt | sed -E 's/.* ([0-9])x([0-9]{2}) .*(\.srt)/S\1E\2\3/g'
如果它打印出正确的替换,只需使用mv
将其放入for loop
中
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
https://stackoverflow.com/questions/11809666
复制相似问题