以下を実行するbashスクリプトがあります。
java -jar executablefile.jar --width 100 --speed 50 --ouput outfile.mp4 --input file1.dat file2.dat file3.dat (etc)
次のように、ディレクトリ内のすべてのファイルを読み取ることができます。
dir=~/location/to/files
for f in "$dir"/*; do
echo "$f"
done
上記のテストはすべてのファイルを示しています。これにより、一度に1つのファイルを$ fに入れることができます。ただし、各ファイル名文字列(私が信じるパスを含む)を次のように使用できる変数に関連付ける必要があります(おそらくそのループ内)。
java -jar executablefile.jar --width 100 --speed 50 --ouput outfile.mp4 --input $listOfFileNamesWithSpaceBetweenEachFile
私は私の人生でこのようなものを見つけることができません。誰でもどんな提案がありますか?
ありがとうございます。
修正する 会話をした後、私が少し間違っていたことがわかりました。次のようにする必要があります。
-- input /path/to/filename1.gpx --input /path/to/filename2.gpx --input /path/to/filename3.gpx etc
だから私は次のように文字列を得ることができます:
VAR=""
dir=~/location/to/files
for f in "$dir"/*; do
echo ${f}
VAR+="--input ${f} "
done
`
みんなの助けをありがとう!
ベストアンサー1
シェルコマンドラインでこのコマンドを実行する場合:
somecommand --input file1.dat file2.dat file3.dat
これにより、somecommand
4つのパラメータ--input
と3つのファイル名が表示されます。あなたも同じことができます。
somecommand --input file*.dat
globは、file*.dat
それぞれ別々の引数を持つファイル名のリストに展開されますsomecommand
。
だから、
java ... --input ~/location/to/files/*
それがあなたがしなければならないすべてであるかもしれません。
このような変数をvar="foo.txt bar.txt"
引用符なしで使用して不都合なリストとして使用できるようになりましたが、一部のファイル名にスペースが含まれているか悪い場合に問題が発生する可能性があります。
代わりに配列を使用してください。
files=(foo.txt bar.txt)
somecommand --input "${files[@]}"
または
files=(foo*.txt) # expands each filename to a distinct array element.
somecommand --input "${files[@]}"
バラより変数に保存されたコマンドをどのように実行できますか?追加の詳細が含まれています。徐々に配列を構築します。
編集では、--input file1 --input file2 ...
パラメータを含むコマンドラインオプションがどのように機能するかなど、コマンドを変更する必要があると述べました。
この場合、次のように配列にパラメータを作成する必要があります。
args=()
dir=~/location/to/files
for f in "$dir"/*; do
args+=(--input "$f")
done
そしてもう一度コマンドを実行してみてください
somecommand ... "${args[@]}"