我有一个脚本,可以从具有特定日期和时间的文件创建图像。该日期和时间存储在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
这将在 shell 变量中组装预期文件名$fname
,并使用 bash 测试运算符[[ ... ]]
检查文件名是否$fname
已存在于当前目录中(如果文件位于不同的目录中,则将其添加到变量$fname
或测试构造中)。如果是,则使用语句跳到下一个循环迭代continue
。
作为旁注,您应该始终用双引号 shell 变量,除非您明确希望发生全局扩展和分词。