"exivtool"을 사용하여 위치별로 사진 이름 바꾸기

"exivtool"을 사용하여 위치별로 사진 이름 바꾸기

다음을 통해 폴더에 있는 모든 JPEG의 이름을 지리적 위치 및 날짜별로 바꿀 수 있습니다.

exiftool '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" *.JPG

이로 인해 다음과 같이 파일 이름이 매우 길어집니다.

53 33 36.95000000 N 9 58 29.37000000 E 2015-11-04 19.22.49.JPG

숏 포지션을 어떻게 사용할 수 있나요? 그래서 이것은 다음과 같은 결과를 가져올 것입니다

53.560308 9.975458 2015-11-04 19.22.49.JPG

아니면 더 좋은 점은 지리적 위치의 도시를 가져와서 이름에 추가하는 것이 가능합니까?

답변1

이렇게 하면 더 짧은 버전이 생성됩니다.

exiftool -coordFormat '%.4f' '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}_$filename' -d "%Y-%m-%d_%H.%M.%S%%-c.%%e" *.JPG

하지만 여전히 나침반 지점 N, E, S 또는 W를 추가합니다.

도시를 추가하려면 루프를 사용하여 추가할 수 있습니다.API 지명:

#!/bin/bash
#exiftool '-filename<${datetimeoriginal}_$filename' -d "%Y-%m-%d_%H.%M.%S%%-c.%%e" *.JPG
for f in *.JPG; do
  echo "$f"
  LAT="$(exiftool -coordFormat '%.4f' "$f"|egrep 'Latitude\s+:'|cut -d\  -f 23)"
  if [ "$LAT" == "" ]; then 
    echo 'no geo coordinates';
  else
    LON="$(exiftool -coordFormat '%.4f' "$f"|egrep 'Longitude\s+:'|cut -d\  -f 22)"
    URL='http://nominatim.openstreetmap.org/reverse?format=xml&lat='$LAT'&lon='$LON'&zoom=18&addressdetails=1'
    RES="$(curl -s "$URL"|egrep "<(city|village|town|ruins|state_district|country)")"
    LOC="$(echo "$RES"|grep '<city>'|sed 's/^.*<city>//g'|sed 's/<\/city>.*$//g')"
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<city_district>'|sed 's/^.*<city_district>//g'|sed 's/<\/city_district>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<village>'|sed 's/^.*<village>//g'|sed 's/<\/village>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<town>'|sed 's/^.*<town>//g'|sed 's/<\/town>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<ruins>'|sed 's/^.*<ruins>//g'|sed 's/<\/ruins>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<state_district>'|sed 's/^.*<state_district>//g'|sed 's/<\/state_district>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then 
      LOC="$(echo "$RES"|grep '<country>'|sed 's/^.*<country>//g'|sed 's/<\/country>.*$//g')"
    fi
    if [ "$LOC" == "" ]; then
      echo "no city found at $URL";
    else 
      BASE="${f%.*}"
      mv -v "$f" "$BASE-$LOC.JPG"
    fi
  fi
done

완료되면 위치별로 이미지를 계산할 수 있습니다

ls -1|cut -d- -f 4|sort|uniq -c|sort -n

관련 정보