특정 날짜와 시간을 가진 파일에서 이미지를 생성하는 스크립트가 있습니다. 날짜와 시간은 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
.
참고로, 전역 확장 및 토큰화가 발생하도록 명시적으로 원하지 않는 한 항상 쉘 변수를 큰따옴표로 묶어야 합니다.