Camelcased ファイルの名前をスペースを含むように一括変更します。

Camelcased ファイルの名前をスペースを含むように一括変更します。

隣接する大文字と小文字の間にスペースを含めるように、camelCaseファイルの名前を一括変更しようとしています。私はMac OSを使用しているので、私が使用するユーティリティはBSDのバリエーションです。

たとえば、

250 - ErosPhiliaAgape.mp3 => 250 - Eros Philia Agape.mp3

find次のコマンドを使用して、関連ファイルをサブシェルでmv実行されているファイルにパイプしようとします。sed

find . -name "*[a-z][A-Z]*" -print0 | xargs -0 -I {} mv {} "$(sed -E 's/([a-z])([A-Z])/\1 \2/g')"

このコマンドだけでも正常に動作します。find正しいファイルを抽出してsed名前を正しく変更しましたが、xargsと組み合わせると何も起こりません。

これを行うには何を変更する必要がありますか?

ベストアンサー1

問題は、コマンドのサブシェルがファイル単位では$(...)なく、コマンドが実行されたときに評価されることです。 'sをxargs使用して、a内の各ファイルのコマンド数を計算し、参照を適切に置き換えることができます。find-execsh

find . -name "*[a-z][A-Z]*" -type f -exec sh -c 'echo mv -v "{}" "$(echo "{}" | sed -E "s/([a-z])([A-Z])/\1 \2/g")"' \;

この出力が良好に見える場合は、echoinを削除してくださいecho mv。 .echo | sed\n

おすすめ記事