Edited at

ファイル名/ディレクトリ名に入っている特殊文字を置き換えするワンライナー


半角丸カッコを全角丸カッコに置換するワンライナー

i=1; while [ $i -ne 0 ]; do find /hogehoge -type f -regex ".*(.*" -exec rename '(' '(' '{}' \;; i=`find /hogehoge -type f -regex ".*(.*" | wc -l`; done


全然ワンライナーじゃないけど…とりあえずメモ。

findしたファイル名をrenameコマンドに食わせていますが、renameコマンドが

1文字置換したら抜けてしまう仕様のようなので、ループさせて特殊文字が

なくなるまで処理させています。

ディレクトリに特殊文字が含まれていると、エラーになってしまうので先にディレクトリに対して

同様の処理をしておくのをオススメします。

ディレクトリに実行する場合は、-type に d を指定します。

なお、角カッコの場合は


半角角カッコを全角角カッコに置換するワンライナー

i=1; while [ $i -ne 0 ]; do find /hogehoge -type f -regex ".*\[.*" -exec rename '[' '[' '{}' \;; i=`find /hogehoge -type f -regex ".*\[.*" | wc -l`; done


findのregexに指定した角カッコの前にエスケープ文字を入れてあげる必要があります。

いつかまた使うかもしれないので、メモ。