如何在Linux中通过删除文件名中的某些字符来重命名文件?

5

我该如何在Linux中重命名文件并删除文件名中的某些字符?

例如,

将My123File.txt重命名为My123.txt。

3个回答

9

如果你只使用通配符(而不是完整的正则表达式),那么你可以尝试类似以下的内容:

f='My123File.txt'
mv $f ${f/File/}

这种类型的shell扩展在这里有文档记录。

如果您确实需要正则表达式,请尝试

f='My123File.txt'
mv $f $(echo $f | sed -e 's/File//')

5

用户重命名,下面是一个测试:

$ touch My123File.txt
$ rename 's/File//' My123File.txt

请参考man renamerename支持正则表达式,因此您可以执行以下操作 - 在安全的地方执行,例如/tmp或其他地方:

cd /tmp
rm *.txt
touch My123File.txt My456File.txt
ls *.txt
rename 's/([A-Za-z]+)(\d+)(\w+)/$3-999-$2-$1/' *.txt
ls *.txt

这将产生以下内容:
My123File.txt  My456File.txt
File-999-123-My.txt  File-999-456-My.txt

我认为你的意思是rename File '' My123File.txt,针对第二行。 - jjlin
重命名文件''My123File.txt'是可以的,但我想要能够使用正则表达式。 - SSS
@jjlin 实际上,我是指我所写的 - 你自己试一试看它会做什么。 @SS 这是一个正则表达式,请参阅 man rename。请查看我的编辑以获取示例。 - icyrock.com
3
很有趣。你对Debian的rename说得没错。然而,CentOS的rename没有正则表达式的功能。 - jjlin
@jjlin 哦,好的,不知道那个。真遗憾:( 不过,Debian / Ubuntu 加一分!;) - icyrock.com

0

使用mmv,只需要一个命令就可以了,而且更简单易用。它还支持翻译功能,例如将位置参数变为小写。

mmv '*File.txt' '#1.txt'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接