использовать `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 

Или еще лучше: можно ли добавить и добавить город геолокации и добавить его к названию?

Это приведет к сокращению версии:

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

Но он все еще добавляет точку компаса N, E, S или W

Если вы хотите добавить город, это можно добавить с помощью цикла, используя nominatim 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