我怎样才能replace目录中的所有文件名string? (具体而言,我需要从目录中的所有文件名删除“\#015”

目录( /root/path/ )中的许多文件都附加了一个奇怪的string( \#015 )。 帮我把它们replace成没有奇怪string的常规名字。

我需要:

 /root/path/img1.png\#015 /root/path/img2.jpg /root/path/img3.png\#015 

成为:

 /root/path/img1.png /root/path/img2.jpg /root/path/img3.png 

你能帮我吗?

 for file in *\#015 do mv -- "$file" "${file%\#015}" done 

您可能需要转义“\”。 先在tmp目录下试试。

如果你已经安装了rename ,这将变成一个相当简单的任务:

 rename 's/\\#015$//' /root/path/*\\#015 

如果需要,可以添加-f标志以强制覆盖现有文件。

这就是我过去用一个小壳来解决类似问题的方法。

 cd /root/path/ ls | grep '\#015' | sed 's/\(.*\)\\#015/mv & \1/' | sh 

您可以通过find和参数替换来完成,如下所示:

 #!/bin/bash find -name '*\\#015' | while IFS= read -rf do mv -- "${f}" "${f%?????}" done 
  • 把上面的代码放到你的/root/path/一个名为my_script.sh的脚本中,然后通过chmod +x my_script.sh && ./my_script.sh运行它
  • 请注意,这会将递归更改应用于/root/path/下的所有子文件夹。

说明:

  • find -name '*\\#015' :找到所有以\#015结尾的文件
  • 然后找到每个这样的文件: mv "${f}" "${f%?????}"将其从旧名称重命名为新名称,并删除文件名中的最后5个字符。