mike-neckのブログ

Java or Groovy or Swift or Golang

Mac OS の bash(zsh) の while read ループの中で ffmpeg を呼ぶと、read が正しく実行できなくなる

大量に ffmpeg でファイルを処理する必要があったので、 find コマンドから while read -r につないで ffmpeg を実行していたら、2 回に 1 回ファイルが見つからずにエラーになった。

set -e
readonly fromDir="images/original"
readonly toDir="images/dest"
declare filepath

while read -r filepath; do
  echo "${filepath}"
  ffmpeg \
      -i "${filepath}" \
      -vf scale=240:180 \
      "${toDir}/${filepath##*/}" 2>/dev/null
done < <(find "${fromDir}" -type f -name '*.png')

これを以下のルートディレクトリーで実行すると…

2 番目のファイルのパスの先頭一文字消えている


find を記述する位置を変更してもファイル名が正しく読み取れなかったので、多分そういうものなのだろう…

上記のコマンドについては、 -i "${filepath}" の部分を -i "${fromDir}/${filepath##*/}" に変更して事なきを得た