如何使用bash脚本重命名当前目录及其子目录中的文件?

tor*_*inx 6 bash shell command-line rename subdirectory

我可以使用'rename'命令将缺少的字符添加到当前目录中的所有文件名,如下所示:

echo "Renaming files..."
rename -v "s/^abcd124(.+)/abcd1234$1/" *.wav.gz;
echo "Done."
Run Code Online (Sandbox Code Playgroud)

但是,我想为当前目录及其所有子目录执行此操作.我试过这个:

echo "Renaming files..."
for dir in $(find ./ -type d); do
    rename -v "s/^$dir\/abcd124(.+)/$dir\/abcd1234$1/" *.wav.gz;
done;
echo "Done."
Run Code Online (Sandbox Code Playgroud)

但是,如果$dir变量包含任何这些特殊字符:{}[]()^$.|*+?\那么它们不能正确转义\并且我的脚本失败.

解决这个问题的最佳方法是什么?另外,你们有什么想法awk用来解决这个问题(优点/缺点?)

小智 6

你也可以尝试:

find . -name "*.wav.gz" | xargs rename -v "s/abcd124*/abcd1234$1/"
Run Code Online (Sandbox Code Playgroud)

它适用于具有"xargs"命令的较新的Unix系统.请注意,我稍微编辑了正则表达式.