回答:
相対パスを使用していて、スクリプトが.mp4
現在のディレクトリ(スクリプトが実行されているディレクトリ)で.mp4
ファイルを探しており、そのようなファイルが存在しないことがわかった場合、リテラル*.mp4
ファイルを探します(nullglob
/ failglob
がセット、これがデフォルトです)、そのファイルも存在しないため、エラーメッセージが表示されます*.mp4: No Such File or Directory
。
代わりに絶対パスを使用する必要があります。
for i in /directory/*.mp4; do ...; done
/directory/
実際のディレクトリパスに置き換えます。必要に応じて、最初の引数としてディレクトリ名も使用できます。
for i in "$1"/*.mp4; do ...; done
ここでは絶対パスまたは相対パスを使用できますが、ここでも絶対パスが常に安全なオプションです。
次に、通常の方法で実行可能スクリプトを呼び出します。
/path/to/script.sh /directory
スクリプトディレクトリから:
./script.sh /directory
*.mp4
どのファイルにも一致しないため、リテラルファイル名と見なし、呼び出されたファイル*.mp4
(有効なファイル名)を開こうとし、ファイルがないために失敗することを意味します。呼ばれる*.mp4
現在のディレクトリでれます。*.mp4
空の可能性がある一致するファイル名のリストに常に展開すると考える人もいるfor
でしょう(その場合、ループは何もせず、エラーは発生しません)。これは*.mp4
当てはまりません。常に何かに展開されます。
bash
)にが、常にそうとは限りません。nullglob
/を見てくださいfailglob
。