何故動かないか結構困ったのでメモ。

動かないもの

find . -name '*.mkv' -exec bash -c 'echo "{}"' \;

cygwin 環境、というかcmd.execygwinの中のfindコマンドを呼び出してるとこれはエラーになっちゃいます。

理由

何故ならfind\;\;をエスケープする役割なので、当然ここにはエスケープキャラクターを入れて置かなければならないわけですが、Windowsのcmdにおいて\はパス区切りであって何もエスケープしてくれません。

なのでcygwinfindcmd.exenyaosなどのWindows環境のシェルから使うときはcmd.exeのエスケープキャラクターの^を使ってこんなふうに書きましょう。

find . -name '*.mkv' -exec bash -c 'echo "{}"' ^;

もしくはどちらの環境でも使える方法の

find . -name '*.mkv' -exec bash -c 'echo "{}"' ';'

を使うのもいいかもしれません。