Skip to content

Instantly share code, notes, and snippets.

@isleshocky77
Created November 9, 2015 21:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isleshocky77/aa491fba148c8b85eb4f to your computer and use it in GitHub Desktop.
Save isleshocky77/aa491fba148c8b85eb4f to your computer and use it in GitHub Desktop.
Changes the date of image in a directory
#!/usr/bin/env bash
options=':c:om'
while getopts $options option
do
case $option in
c ) timeChange=$OPTARG;;
m ) syncModifiedTimestamp=true;;
o ) execute=true;;
h ) echo "imageChangeDate.sh [-c] timeChange String] [-o] Overwrite File"; exit;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
shift $(($OPTIND - 1))
printf "%-20s %-40s %-23s %-23s %-23s\n" "File" "Modification" "Exif-DateTime" "Exif-DateTimeOriginal" "Exif-DateTimeDigitized";
for image in $(find . -type f -iname '*.jpg'); do
modificationTimestamp=$(stat -c %y $image);
exifDateTime=$(exif --ifd=0 -m -t 0x0132 $image | sed 's/:/-/;s/:/-/');
exifDateTimeOriginal=$(exif -m -t 0x9003 $image | sed 's/:/-/;s/:/-/');
exifDateTimeDigitized=$(exif -m -t 0x9004 $image | sed 's/:/-/;s/:/-/');
printf "%-20s %-40s %-23s %-23s %-23s\n" \
"$image" \
"$modificationTimestamp" \
"$exifDateTime" \
"$exifDateTimeOriginal" \
"$exifDateTimeDigitized" \
;
if [ -n "$timeChange" ]; then
if [ $syncModifiedTimestamp ]; then
# Use EXIF DateTaken
modificationTimestamp=$(date -d "$exifDateTime $timeChange" "+%F %T");
else
modificationTimestamp=$(date -d "$modificationTimestamp $timeChange" --iso-8601=seconds);
fi;
exifDateTime=$(date -d "$exifDateTime $timeChange" "+%F %T");
exifDateTimeOriginal=$(date -d "$exifDateTimeOriginal $timeChange" "+%F %T");
exifDateTimeDigitized=$(date -d "$exifDateTimeDigitized $timeChange" "+%F %T");
printf "%-20s %-40s %-23s %-23s %-23s\n" \
" $image" \
"$modificationTimestamp" \
"$exifDateTime" \
"$exifDateTimeOriginal" \
"$exifDateTimeDigitized" \
;
if [ $execute ]; then
# Correct format for EXIF
exifDateTime=$(echo "$exifDateTime" | sed 's/-/:/;s/-/:/');
exifDateTimeOriginal=$(echo "$exifDateTime" | sed 's/-/:/;s/-/:/');
exifDateTimeDigitized=$(echo "$exifDateTime" | sed 's/-/:/;s/-/:/');
exif --ifd=0 -t 0x0132 --set-value="$exifDateTime" -o $image $image;
exif --ifd=EXIF -t 0x9003 --set-value="$exifDateTimeOriginal" -o $image $image;
exif --ifd=EXIF -t 0x9004 --set-value="$exifDateTimeDigitized" -o $image $image;
touch --date="$modificationTimestamp" $image;
fi;
fi;
done;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment