Попробуйте использовать утилиту deurlname
из пакета renameutils
... Она доступна как для cygwin , так и homebrew ...
Тогда: find /tmp/site | tac | while read line;do deurlname "${line}";done
Кроме того, find
переименовывает только первое вхождение, потому что после переименования родительской папки все ее содержимое не будет работать с file not found
.Так что, если у вас нет и вы не хотите устанавливать homebrew / renameutils, попробуйте find /tmp/site | tac | while read line;do mv "${line}" "${line//%3d/=}";done
Также, выполнив -exec bash -c '$0 ${0/...'
, вы вводите всю команду одинарными кавычками, поэтому, если вы попытаетесь переименовать %20
в космос, он потерпит неудачу.Если вы хотите его использовать, введите в кавычки имя файла -exec bash -c 'mv "$0" "${0/...}" {} \;
.Кроме того, подстановка переменных bash ${0/}
(с одной косой чертой) заменяет только первое вхождение, поэтому используйте ${0//}
для замены каждого вхождения.
Или, если вы хотите переименовать все URL-теги сразу, используя find
+ sed
: find /tmp/site | tac | while read line;do mv "${line}" "$(sed -e 's|%3d|=|g' -e 's|%26|\&|g' -e 's|%3f|-|g' <<<$line)";done
Я использую tac
, чтобы инвертировать вывод find
и избежатьпроблема переименования родительской папки перед дочерними.