特定の日付と時刻を持つファイルから画像を生成するスクリプトがあります。日付と時刻はlist.txt
ファイルに保存され、複数行の日付は同じで、時刻は異なります。
2020 03 12 11 45
2020 03 12 10 23
2020 03 12 04 12
2020 03 12 00 23
私はwhileループからこのTXTファイルを読みました。
while read line
do
echo Line is... $line
echo $line > $BIN/line.txt
python3 $BIN/makeimage.py #creates image
done < $BIN/list.txt
出力イメージのファイル名は次のとおりです。filename_202003_1245.png
。
最も簡単な解決策は何ですか?ファイルがすでに存在することを確認したら、次の行に進みますかlist.txt
?今私のスクリプトは画像を上書きしています。list.txt
画像を作成したらすぐに行を削除するのか、awk
ファイル名からgrep
時間と分を抽出してlist.txt
比較するのかわかりません。
答え1
makeimage.py
スクリプトが常にファイル名を指定しているとします。
ファイル名_YYYYNN_隠れマルコフモデル.png
固定文字列を使用すると、filename
スクリプトを次のように変更できます。
while read year nr hr min sec
do
echo "Line is >$year $nr $hr $min $sec<"
fname="filename_${year}${nr}_${hr}${min}.png"
if [[ -f "$fname" ]]
then
echo "File $fname already exists, skipping"
continue
fi
echo "$year $day $hr $min $sec" > "$BIN/line.txt"
python3 "$BIN"/makeimage.py #creates image
done < $BIN/list.txt
これは予想されるファイル名をシェル変数に結合し、$fname
bashテスト演算子を使用して[[ ... ]]
そのファイル名が現在のディレクトリにすでに存在することを確認します(ファイルが別のディレクトリにある場合は変数またはテスト設定$fname
に追加)。$fname
その場合は、ステートメントを使用して次のループ反復にジャンプしますcontinue
。
注:グローバル拡張とトークン化を明示的に望まない限り、必ずシェル変数を二重引用符で囲む必要があります。