Как переименовать файлы в текущем каталоге и его подкаталогах с помощью скрипта bash?

Я могу использовать команду 'rename' для добавления отсутствующего символа ко всем именам файлов в текущем каталоге следующим образом:

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

Однако я хотел бы сделать это для текущего каталога и все его подкаталоги.Я пробовал это:

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

Однако, если переменная $dirсодержит какие-либо из этих специальных символов: {}[]()^$. |*+?\, то они не экранируются должным образом с помощью \, и мой скрипт дает сбой.

Как лучше всего решить эту проблему? Кроме того, что вы, ребята, думаете об использовании awkдля решения этой проблемы (преимущества/недостатки?)

6
задан MERose 24 April 2015 в 12:56
поделиться