sed正则表达式替换部分文件名

时间:2014-10-02 13:50:59

标签: bash filesystems

通过sed教程,但无法弄清楚如何使用。

在子文件夹中有100个文件,例如' ABCxxx.ext'需要重命名为' XYZxxx.ext'

其中xxx是不同的alpha数字字符串,而.ext是任何扩展名(xml,java,xls)

我能够使用:

find . -iname "ABC*.*" 

在终端中,要查看这些文件,但不确定使用哪个sed或其他命令来重命名文件。在Mac 10.9.4上

实施例: " Abc01k.xls" ==> " Xyz01k.xls" " Abcloans.xml" ==> " Xyzloans.xml" " AbcThreads.java" ==> " XyzThreads.java"

因此,如果文件名中包含Abc字符,请将其替换为Xyz。可以是第一个字符或内部。

阅读:https://www.gnu.org/software/sed/manual/sed.html https://apple.stackexchange.com/questions/131164/how-to-tag-files-with-finder-tags-using-parts-of-a-file-name

https://apple.stackexchange.com/questions/75114/any-easy-way-to-search-for-replace-characters-in-jpg-file-names-in-a-folder

最后1个适用于1个文件夹,但我希望它能访问所有文件夹。

bash脚本:

for i in Abc*; do
      mv "$i" "${i/Abc/Xyz}"
done

如何为所有子文件夹调用此脚本?或者如何对sed做同样的事情?

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

var1=`find . -type f -iname '*ABC*'`
for i in $var1; do mv "$i" "`echo $i | sed 's/ABC/ZXC/g'`"; done

这将重命名子目录中的文件,并更改" ABC"到" ZXC"即使在文件名中间。

答案 1 :(得分:1)

您可以使用此find命令:

find . -iname "ABC*.*" -exec bash -c 'f="$1"; mv "$f" "${f/Abc/Xyz}"' - {} \;