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

SSS*_*SSS 4 linux bash shell

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

例如,

将My123File.txt重命名为My123.txt

jjl*_*lin 9

如果你只使用通配符(不是完整的正则表达式),那么你可能会尝试类似的东西

f='My123File.txt'
mv $f ${f/File/}
Run Code Online (Sandbox Code Playgroud)

这里记录这种类型的shell扩展.

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

f='My123File.txt'
mv $f $(echo $f | sed -e 's/File//')
Run Code Online (Sandbox Code Playgroud)


icy*_*com 5

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

$ touch My123File.txt
$ rename 's/File//' My123File.txt
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

产生这个:

My123File.txt  My456File.txt
File-999-123-My.txt  File-999-456-My.txt
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这很有趣。你对 Debian `rename` 的看法是对的。不过,CentOS `rename` 没有正则表达式功能。 (3认同)