올바른 EXIF 정보가 포함된 여러 장의 사진이 있고 사진 이름이 무작위로 지정되어 있다고 가정해 보겠습니다(문제가 발생했기 때문에). jhead
다음과 같은 출력을 제공하는 작은 프로그램이 있습니다 .
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
이제 폴더에 있는 모든 사진의 이름을 다음 형식으로 바꿔야 합니다.
001.JPG
002.JPG
003.JPG
...
부 번호는 이전 이미지이고 최대 번호는 최신 이미지입니다.
제가 글을 잘 못써서 도움을 요청했습니다.
나는 bash 스크립트로 충분할 것이라고 생각하지만, 더 편안하다면 Python 스크립트를 작성할 수도 있습니다.
내 생각에는 다음과 같다.
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
하지만 동시에 모든 파일에 대해 이 작업을 수행하는 방법을 모르겠습니다.
답변1
방금 발견했습니다여기jhead가 당신을 위해 모든 것을 할 수 있습니다! :)
jhead -autorot -nf%Y-%m-%d_%H-%M-%S *.jpg
답변2
for 루프(셸/셸 스크립트에서)를 사용하여 모든 파일에 액세스할 수 있습니다.
for i in *.JPG; do
j=`jhead "$i" | grep date | sed 's/^File date[^:]\+: \(.\+\)$/\1/'`.jpg
echo mv -i "$i" "$j"
done
이것은 아주 기본적인 개요일 뿐입니다. echo
모든 것이 정상임을 확인하면 삭제하세요.
답변3
exiv2
매우 간단한 구문을 허용하는 대체 작업 방법입니다.
exiv2는 Exif, IPTC, XMP 메타데이터 및 이미지 주석을 읽고 쓰는 프로그램이며, 여러 공급업체의 메이커노트 태그를 읽을 수 있습니다. 이 프로그램에는 Exif 태그, XMP 속성 및 IPTC 데이터 세트 간을 변환하는 옵션이 있습니다.
따라서 현재 폴더의 모든 jpeg 이름이 변경됩니다.
for i in *.JPG; do exiv2 -v -r '%Y%m%d.%H%M%S.:basename:' rename "$i"; done
지리 정보도 추가하려면 다음을 사용할 수 있습니다 exivtool
.
exiftool '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" *.JPG
답변4
maxschlepzig가 게시한 코드가 마음에 들지만 여전히 출력에 문제가 있습니다.
문제는 생성된 파일 이름의 공백(날짜 문자열과 시간 문자열 사이)입니다. GUI를 사용하는 사람에게는 사소한 일이지만 명령줄에서 파일을 처리하는 것이 훨씬 더 어려워집니다.
여기서 "sed" 명령은 기본적으로 이전 전체 매개변수를 지원하기 위해 4개의 개별 "sed" 작업으로 변경되었습니다. 나 자신에 맞게 아래 파일도 일반 644 권한으로 변경합니다.
for i in *.JPG ; do
chmod 644 $i
j=`jhead "$i" | grep ^Date/Time | sed -e 's/^Date\/Time[ ]\+: //;s/:/-/g;s/ /_/g':/-/g;s/ /_/g'`.jpg
echo mv -i "$i" "$j"
# mv -i "$i" "$j"
done