如何替换目录中所有文件名中的字符串? (具体来说,我需要从目录中的所有文件名中删除“\#015”

时间:2012-11-16 16:28:18

标签: linux unix replace sed awk

目录中的许多文件(/root/path/)都附加了一个奇怪的字符串(\#015)。帮我用普通的名字替换它们,没有奇怪的字符串。

我需要:

/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

你能帮忙吗?

4 个答案:

答案 0 :(得分:5)

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

你可能需要逃避“\”。首先在tmp目录中尝试。

答案 1 :(得分:5)

如果您安装了rename,这将成为一项相当简单的任务:

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

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

答案 2 :(得分:1)

这就是我过去用一点shell解决类似问题的方法。

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

答案 3 :(得分:0)

您可以使用find和参数替换执行此操作,如下所示:

#!/bin/bash

find -name '*\\#015' | while IFS= read -r f
do
    mv -- "${f}" "${f%?????}"
done
  • 将上述代码放入my_script.sh中名为/root/path/的脚本中,并按chmod +x my_script.sh && ./my_script.sh
  • 运行
  • 请注意,这会将更改递归应用于/root/path/下的所有子文件夹。

<强>解释

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