パイプ コマンドで現在のファイル名を複数回使用するにはどうすればよいですか?

パイプ コマンドで現在のファイル名を複数回使用するにはどうすればよいですか?

.mov ファイルのバッチを mp4 に変換しようとしています。パイプからファイル名を取得して ffmpeg コマンドを生成するにはどうすればよいでしょうか? チェーン リンクでパイプ引数を複数回使用するにはどうすればよいでしょうか? 次のようなことを試しています:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

答え1

パイプは、標準出力1つのコマンドとして標準入力別のコマンドの ですが、 の標準入力にあるファイル名ではなく、ファイルを入力として渡す必要がありますffmpeg。また、出力ファイルを取得するには、入力ファイルごとに 1 回ずつ、複数回実行する必要がありますffmpeg

簡単に言うと、パイプはこれには役に立ちません。他の回答で示唆されているように、ループが必要です。ただし、ファイル名パラメータは二重引用符で囲む必要があります。

for file in *.MOV; do
    ffmpeg -y -i "$file" "$file.mp4"
done

コメントで、Perl スクリプトを記述できると述べられています。これはやりすぎです。Bash はよりシンプルで、最適のアプローチです。上記のスクリプトを 1 行で記述し、コマンド ラインで直接実行できることに注意してください。

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done

答え2

for単純なループを使ってこれを行うことができます

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done

関連情報