find の `-exec` オプションを cygwin で使うときの注意点
何故動かないか結構困ったのでメモ。
動かないもの
find . -name '*.mkv' -exec bash -c 'echo "{}"' \;
cygwin 環境、というかcmd.exe
でcygwin
の中のfind
コマンドを呼び出してるとこれはエラーになっちゃいます。
理由
何故ならfind
の\;
の\
は;
をエスケープする役割なので、当然ここにはエスケープキャラクターを入れて置かなければならないわけですが、Windowsのcmd
において\
はパス区切りであって何もエスケープしてくれません。
なのでcygwin
のfind
をcmd.exe
やnyaos
などのWindows環境のシェルから使うときはcmd.exe
のエスケープキャラクターの^
を使ってこんなふうに書きましょう。
find . -name '*.mkv' -exec bash -c 'echo "{}"' ^;
もしくはどちらの環境でも使える方法の
find . -name '*.mkv' -exec bash -c 'echo "{}"' ';'
を使うのもいいかもしれません。