アイデアは、コマンドを実行したいのですが、処理するファイル名を要求し、処理が完了したらというイメージを出力し、次のファイルprediction.png
名を尋ねるように進むということです。何千ものファイルがあるため、毎日手動で入力することはできません。ただし、すべてのファイル名を含む.txtファイルがあります。
だから私はbashスクリプトを書くのが好きです:
1-コマンドを実行します
2-ファイル名を尋ねると、txtファイルの最初の行を読みます。
3-プログラムはファイルを処理して画像を出力し、画像を別のディレクトリにコピーします(次のファイルを上書きしないように)。
4- 次に、次のことを要求し、同じことを行います。
プログラムはファイルを要求し、.txt ファイルが完了するまで自動的に終了します。
これまで私ができることは、ファイルを1つずつ読み、プログラムが要求したときに応答として渡すことだけです。
cat filenames.txt | ./program.sh
cp
問題は、新しいファイルを処理する前に出力したいということです。
答え1
program.sh
引き続きファイルを作成し、ファイルがいつ完成するのかわからないため、一度だけ実行している間はこれを実行できないようです。
代わりに、filenames.txtの各行に対してプログラムを1回実行してください。
while IFS= read -r FILE; do # loop through files in filenames.txt
echo "$FILE" | ./program.sh # run program once and end it with newline
mv created_filename /some/other/location/${FILE}.ext; # move file
done < filenames.txt
mv
代わりに使用するcp
と、同じファイルシステムに移動する方が高速です。- 出力形式を変更します
.ext
(例.png
:)。
答え2
次のことができます。
(
while IFS= read -r FILE; do
echo "$FILE"
sleep 1 # or somehow make a trigger to see when the file is ready ...
mv output_file /somewhere/else
done < filenames.txt;
) | ./program.sh
(渡す)
xargsを使用しても同じです。
(
xargs -a filenames.txt -I{} sh -c 'echo {}; sleep 1; mv file /somewhere/else'
) | ./program.sh