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

如何在linux中通过删除文件名中的某些字符来重命名文件?,linux,bash,shell,Linux,Bash,Shell,如何在linux中重命名文件以从文件名中删除某些字符 比如说, My123File.txt要重命名为My123.txt用户重命名,下面是一个测试: $ touch My123File.txt $ rename 's/File//' My123File.txt 请参见man重命名重命名支持regexp,因此您可以这样做,例如,在安全的地方执行,例如/tmp或其他: cd /tmp rm *.txt touch My123File.txt My456File.txt ls *.txt rename

如何在linux中重命名文件以从文件名中删除某些字符

比如说,


My123File.txt要重命名为My123.txt

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

$ touch My123File.txt
$ rename 's/File//' My123File.txt
请参见
man重命名
<代码>重命名支持regexp,因此您可以这样做,例如,在安全的地方执行,例如/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

如果您只使用通配符(不是完整的regex)可以,那么您可能会尝试类似的方法

f='My123File.txt'
mv $f ${f/File/}
记录了这种类型的外壳扩展

如果你真的需要正则表达式,试试看

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

使用mmv,这是一个简单得多的命令。它还支持转换,例如将位置参数小写

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

我想你的意思是第二行的
重命名文件“”My123File.txt
。重命名文件“”My123File.txt可以工作,但我希望能够使用正则表达式。@jjlin实际上,我的意思是我写的-自己试试看它会做什么@SS这是一个regexp,请参见
man rename
。看我的编辑的例子。嗯,这很有趣。关于Debian
重命名
,您是对的。不过,CentOS
rename
没有正则表达式功能。@jjlin啊,好吧,我不知道。这是一个耻辱:(嗯,Debian/Ubuntu加1!;)