Guest User

exif-timestamp

a guest
Mar 31st, 2014
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #! /bin/bash
  2.  
  3. getopt -T &> /dev/null
  4. if [ $? -ne 4 ]; then
  5. echo "${0##*/}: GNU's enhanced version of getopt is not installed" > /dev/stderr
  6. exit 1
  7. fi
  8.  
  9. OPTIONS="z:tr"
  10.  
  11. PTimeZone=""
  12. PEnableTouch="no"
  13. PEnableRename="no"
  14.  
  15. ARGS="$(getopt -o "$OPTIONS" -n "${0##*/}" -- "$@")" || exit
  16. eval set -- "$ARGS"
  17.  
  18. while true; do
  19. getopts "$OPTIONS" opt || break
  20. case "$opt" in
  21. "z")
  22. PTimeZone="$OPTARG"
  23. ;;
  24. "t")
  25. PEnableTouch="yes"
  26. ;;
  27. "r")
  28. PEnableRename="yes"
  29. ;;
  30. esac
  31. done
  32.  
  33. shift "$(($OPTIND-1))"
  34.  
  35. if [ $# -lt 1 ]; then
  36. cat << EOF > /dev/stderr
  37.  
  38. Touch and/or rename photos based on EXIF timestamp
  39.  
  40. Usage: ${0##*/} [ <options> ] <filename> [ <filename> ... ]
  41.  
  42. Options:
  43. -z Set EXIF timestamp's timezone (default is the local timezone)
  44. -t Enable touch mode
  45. -r Enable rename mode
  46.  
  47. EOF
  48. exit 1
  49. fi
  50.  
  51. command="exif"
  52. commandvar="${command//[-.]/_}"
  53. eval "$commandvar"="$(command -v "$command")"
  54. if [ -z "${!commandvar}" ]; then
  55. echo "${0##*/}: $command not installed" > /dev/stderr
  56. exit 1
  57. fi
  58.  
  59. for filename in "$@"; do
  60. if [ ! -r "$filename" ]; then
  61. echo "${0##*/}: $filename: file not found or not readable" > /dev/stderr
  62. continue
  63. fi
  64. printf "%-16s " "$filename"
  65. exif_datestamp="$("$exif" -t "DateTimeOriginal" "$filename")"
  66. if [ -z "$exif_datestamp" ]; then
  67. echo "EXIF entry \"Date and Time (original)\" not found"
  68. continue
  69. fi
  70. unset ExifYear ExifMonth ExifDay ExifHour ExifMin ExifSec
  71. eval "$(echo "$exif_datestamp" | awk 'BEGIN { FS="[ :]+" } $2=="Value" && $3!="" && $4!="" && $5!="" && $6!="" && $7!="" && $8!="" { printf "ExifYear=%u\nExifMonth=%u\nExifDay=%u\nExifHour=%u\nExifMin=%u\nExifSec=%u\n",$3,$4,$5,$6,$7,$8 }')"
  72. if [ -z "$ExifYear" -o -z "$ExifMonth" -o -z "$ExifDay" -o -z "$ExifHour" -o -z "$ExifMin" -o -z "$ExifSec" ]; then
  73. echo "EXIF entry \"Date and Time (original)\" empty or invalid"
  74. continue
  75. fi
  76. ExifTimeStamp="$ExifYear-$ExifMonth-$ExifDay $ExifHour:$ExifMin:$ExifSec $PTimeZone"
  77. if [ "$PEnableTouch" = "yes" ]; then
  78. touch -t "$(date -d "$ExifTimeStamp" "+%Y%m%d%H%M.%S")" "$filename"
  79. fi
  80. if [ "$PEnableRename" = "yes" ]; then
  81. filename_dirname="$(dirname "$filename")"
  82. filename_basename="$(basename "$filename")"
  83. new_basename="$(date -d "$ExifTimeStamp" "+%Y%m%d-%H%M%S")-${filename_basename##*-}"
  84. if [ "$new_basename" != "$filename_basename" ]; then
  85. mv -f "$filename" "$filename_dirname/$new_basename"
  86. fi
  87. fi
  88. date -d "$ExifTimeStamp" "+%Y-%m-%d %H:%M:%S %z"
  89. done.
Advertisement
Add Comment
Please, Sign In to add comment