У меня есть большое количество файлов в структуре каталогов, которые я хочу переименовать.
Имена файлов имеют следующий формат:
"aaaaaa-bbbbbb_cccccc-ddddd_eeeeee-fffff-ggggg-hhhhh.psd"
Я хочу их в таком формате:
"Aaaaaa-Bbbbbb_Cccccc-Ddddd_Eeeee-Fffff-Ggggg-Hhhhh.psd
Одна процедура find и sed должна преобразовать их в правильный формат:
find . -name "*psd" -exec sh -c "echo 'cp '{} `echo {} | sed 's/\([_-][a-z]\)\([A-Z]*\)/\2\U\1/g'`" \;
Но это не работает:
вход:
Assisted-or-Auto/Abstract-Render/assisted-or-auto_abstract-render_tiny-bubbles3.psd
выход:
СР
Процедура sed работает, если я удалю обратную галочку и вставлю точку с запятой.
find . -name "*bubbles3.psd" -exec sh -c "echo 'cp '{} ; echo {} | sed 's/\([_-][a-z]\([A-Z]*\)/\2\U\1/g'" \;
cp ./Assisted-or-Auto/Abstract-Render/assisted-or-auto_abstract-render_tiny-bubbles3.psd
./Assisted-Or-Auto/Abstract-Render/assisted-Or-Auto_Abstract-Render_Tiny-Bubbles3.psd
Итак, по какой-то причине обратная кавычка не делает то, что должна делать. Любые идеи о том, как я могу решить эту проблему? к сведению, замена обратных кавычек на нотацию "$(cmd)" имеет тот же эффект
Спасибо