View difference between Paste ID: pjuYCxER and Y9bfhUDR
SHOW: | | - or go back to the newest paste.
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-
Written by Müszi <[email protected]>
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.