Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/bash
- getopt -T &> /dev/null
- if [ $? -ne 4 ]; then
- echo "${0##*/}: GNU's enhanced version of getopt is not installed" > /dev/stderr
- exit 1
- fi
- OPTIONS="z:tr"
- PTimeZone=""
- PEnableTouch="no"
- PEnableRename="no"
- ARGS="$(getopt -o "$OPTIONS" -n "${0##*/}" -- "$@")" || exit
- eval set -- "$ARGS"
- while true; do
- getopts "$OPTIONS" opt || break
- case "$opt" in
- "z")
- PTimeZone="$OPTARG"
- ;;
- "t")
- PEnableTouch="yes"
- ;;
- "r")
- PEnableRename="yes"
- ;;
- esac
- done
- shift "$(($OPTIND-1))"
- if [ $# -lt 1 ]; then
- cat << EOF > /dev/stderr
- Touch and/or rename photos based on EXIF timestamp
- Usage: ${0##*/} [ <options> ] <filename> [ <filename> ... ]
- Options:
- -z Set EXIF timestamp's timezone (default is the local timezone)
- -t Enable touch mode
- -r Enable rename mode
- EOF
- exit 1
- fi
- command="exif"
- commandvar="${command//[-.]/_}"
- eval "$commandvar"="$(command -v "$command")"
- if [ -z "${!commandvar}" ]; then
- echo "${0##*/}: $command not installed" > /dev/stderr
- exit 1
- fi
- for filename in "$@"; do
- if [ ! -r "$filename" ]; then
- echo "${0##*/}: $filename: file not found or not readable" > /dev/stderr
- continue
- fi
- printf "%-16s " "$filename"
- exif_datestamp="$("$exif" -t "DateTimeOriginal" "$filename")"
- if [ -z "$exif_datestamp" ]; then
- echo "EXIF entry \"Date and Time (original)\" not found"
- continue
- fi
- unset ExifYear ExifMonth ExifDay ExifHour ExifMin ExifSec
- 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 }')"
- if [ -z "$ExifYear" -o -z "$ExifMonth" -o -z "$ExifDay" -o -z "$ExifHour" -o -z "$ExifMin" -o -z "$ExifSec" ]; then
- echo "EXIF entry \"Date and Time (original)\" empty or invalid"
- continue
- fi
- ExifTimeStamp="$ExifYear-$ExifMonth-$ExifDay $ExifHour:$ExifMin:$ExifSec $PTimeZone"
- if [ "$PEnableTouch" = "yes" ]; then
- touch -t "$(date -d "$ExifTimeStamp" "+%Y%m%d%H%M.%S")" "$filename"
- fi
- if [ "$PEnableRename" = "yes" ]; then
- filename_dirname="$(dirname "$filename")"
- filename_basename="$(basename "$filename")"
- new_basename="$(date -d "$ExifTimeStamp" "+%Y%m%d-%H%M%S")-${filename_basename##*-}"
- if [ "$new_basename" != "$filename_basename" ]; then
- mv -f "$filename" "$filename_dirname/$new_basename"
- fi
- fi
- date -d "$ExifTimeStamp" "+%Y-%m-%d %H:%M:%S %z"
- done.
Advertisement
Add Comment
Please, Sign In to add comment