名前を変更したいディレクトリ構造に多数のファイルがあります。
ファイル名は
「aaaaaa-bbbbbb_cccccc-ddddd_eeeee-fffff-ggggg-hhhhh.psd」の形式です。
「Aaaaaa-Bbbbbb_Ccccccc-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
出力:
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
バッククォートを削除してセミコロンを挿入すると、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) 」表記に置き換えると、同じ効果があります
ありがとう