ゆう's Blog
forループを使うときにlsコマンドは適さない

ファイル名にスペースが含まれる場合、forループを使うときにlsコマンドは適していません。その理由は、スペースがシェルで分割されてしまい、意図しない挙動を引き起こすためです。

for file in $(ls -v | grep "\.mp4$")

代わりに、findコマンドやwhileループとreadコマンドを組み合わせるのがおすすめです。

#!/bin/bash # .mp4 ファイルを対象に処理 find . -type f -name "*.mp4" | while IFS= read -r file; do clean_file="${file#./}" # 先頭の './' を削除 echo "Processing: $clean_file" # 必要な処理をここに追加 done

${file#./}は、変数の内容を加工するためのパラメータ展開というBashの機能を使っています。
${var#prefix}の形式で、変数varの先頭にあるprefix(文字列)が一致した場合、その部分を削除した結果を返します。