디렉토리의 모든 이미지를 반복하고 EXIF를 사용하여 생성된 날짜와 시간을 확인하는 다음 bash 스크립트가 있습니다. EXIF 정보를 사용할 수 없는 경우 이미지의 마지막 수정 날짜를 사용해야 하는지 사용자에게 묻습니다. 사용자가 거부하면 이미지를 건너뛰어야 합니다.
for file in *.jpg; do
if datetime="$(exif --debug --machine-readable --tag=DateTimeOriginal "$file" 2>&1)"; then
datetime="${datetime##*$'\n'}"
else
datetime="$(stat --format=%y "$file")"
datetime="${datetime%\.*}"
echo "Warning: $file does not contain tag DateTimeOriginal"
echo "Last modified date is $datetime - use it instead?"
select yn in "Yes" "No"; do
case "$yn" in
Yes)
echo "Info: using last modified date for $file"
break
;;
No)
echo "Info: $file skipped - not using last modified date"
break
continue
;;
esac
done
fi
echo "Renaming $file..."
done
문제는 사용자가 이를 거부하더라도 여전히 마지막 줄에 도달한다는 것입니다(즉, "Rename $file..."이 표준 출력에 인쇄됩니다). 제 생각에는 도착이 break
차단 되었기 때문인 것 같습니다 continue
. 이 두 명령문을 뒤집어 보았지만 이로 인해 무한 루프가 발생했습니다.
No)
echo "Info: $file skipped - not using last modified date"
continue
break
;;
내가 하고 싶은 것이 무엇인지 분명하길 바랍니다.
편집하다
작동하는 것을 찾았지만 더 나은 방법이 있으면 알려주십시오.
for file in *.jpg; do
answer=
if datetime="$(exif --debug --machine-readable --tag=DateTimeOriginal "$file" 2>&1)"; then
datetime="${datetime##*$'\n'}"
else
datetime="$(stat --format=%y "$file")"
datetime="${datetime%\.*}"
echo "Warning: $file does not contain tag DateTimeOriginal"
echo "Last modified date is $datetime - use it instead?"
option1="Use last modified date"
option2="Skip file"
select answer in "$option1" "$option2"; do
case "$answer" in
"$option1"|"$option2")
break
;;
esac
done
if [ "$answer" = "$option2" ]; then
echo "Info: $file skipped - not using last modified date"
continue
fi
fi
echo "Renaming $file..."
done
답변1
편집하다: 다음을 시도해 볼 수 있습니다.
for file in *.jpg; do
if datetime="$(exif --debug --machine-readable --tag=DateTimeOriginal "$file" 2>&1)"; then
datetime="${datetime##*$'\n'}"
else
datetime="$(stat --format=%y "$file")"
datetime="${datetime%\.*}"
echo "Warning: $file does not contain tag DateTimeOriginal"
echo "Last modified date is $datetime - use it instead?"
select yn in "Yes" "No"; do
case "$yn" in
Yes)
echo "Info: using last modified date for $file"
break
;;
No)
echo "Info: $file skipped - not using last modified date"
break && continue
;;
esac
done
fi
echo "Renaming $file..."
done