exec_sh mLast updated: 2015-01-18
###Find images in a directory that don't have a DateTimeOriginal###
exiftool -filename -filemodifydate -createdate -r -if '(not $datetimeoriginal) and $filetype eq "JPEG"' .
###Output photos that don't have datetimeoriginal to a CSV### Note this can take a long time if you have a lot of jpgs
# You'll need to set your Dropbox folder path. I have mine set as a global variable
OLDFILE="$DROPBOX_PERSONAL/nodates.csv"
FILECOUNT=$(mdfind -count -onlyin "$DROPBOX_PERSONAL" 'kMDItemKind =="JPEG image"')
while IFS= read -r -d '' n; do
FILECOUNT=$(( $FILECOUNT - 1 ))
if grep -q "$n" "$OLDFILE"; then
echo "Skipping $n"
continue
fi
echo -ne "Remaining: $FILECOUNT\r"
exiftool -q -if '(not $datetimeoriginal or ($datetimeoriginal eq "0000:00:00 00:00:00"))' -csv -common "$n" | sed 1d >> "$DROPBOX_PERSONAL/nodates.csv"
done < <( mdfind -onlyin "$DROPBOX_PERSONAL" 'kMDItemKind =="JPEG image"' -0 )
###See files File Modify Date recursively in a directory who don't have datetimeoriginal set###
exiftool -filemodifydate -r -if '(not $datetimeoriginal or ($datetimeoriginal eq "0000:00:00 00:00:00")) and ($filetype eq "JPEG")' .
###Change JPG to jpg and MOV to mov in filenames###
for i in *.JPG; do mv "$i" "${i%%.JPG}.jpg"; done; !#:gs/JPG/MOV/:gs/jpg/mov/
Recursively
find /path/to/directory -name *JPG -exec sh -c 'mv "$0" "${0%%.JPG}.jpg"; echo "Moved $0 to ${0%%.JPG}.jpg"' {} \;
###Change last created and modified for files in a directory###
The date syntax has to be YYYY:MM:DD HH:MM:SS
Option 1:
find . -name "*.jpg" | while read filename;
exiftool "-AllDates=1986:11:05 12:00:00" "$filename";
done
Option 2:
exiftool "-AllDates=1986:11:05 12:00:00" -if '$filetype eq "JPEG"' .
Info at http://www.sno.phy.queensu.ca/~phil/exiftool/Shift.html
exiftool "-AllDates+=1:0:0 0" .
###Rename files to datestamp###
Filename looks like 2014-01-01 12:00:00.jpg and will append -NUM if DateTimeOriginal is the same for multiple files
exiftool '-FileName<DateTimeOriginal' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" .
exiftool '-datetimeoriginal<filemodifydate' -if '(not $datetimeoriginal or ($datetimeoriginal eq "0000:00:00 00:00:00")) and ($filetype eq "JPEG")' .
exiftool '-datetimeoriginal=2015:01:18 12:00:00' .
###Copy directory recursively into organized folder###
exiftool -o ~/dummy/ -if '$filesize# > 300000' '-Directory<CreateDate' -d ~/Desktop/old_photos2/%Y/%m\ %B -r ~/Desktop/iPhoto\ Library/
-o ~/dummy
This flag is to copy, not move. The directory is a fallback if the flag isn't available on the given photo. Good if using something like DateTimeOriginal
-if '$filesize# > 300000'
gets files that are over 300kB. I was parsing an iPhoto library where there were thumbnails. The #
turns the value to a number. you can use the flag -n
to turn all values to numbers
'-Directory<CreateDate'
Create directories based on the CreateDate of the photos
-d ~/Desktop/old_photos/%Y/%m\ %B
Create folders with the given date format.
-r
Run recursively
###Create KML from geotagged photos###
DESKTOP=$HOME/Desktop
cat $DESKTOP/kml-start.fmt > out.kml
exiftool -n -r -q -p $DESKTOP/kml-placemark.fmt . >> out.kml
cat $DESKTOP/kml-end.fmt >> out.kml
###Create CSV of Geo Information###
exiftool -csv -filename -imagesize -gps:GPSLatitude -gps:GPSLongitude ./ > long.csv
sh
with -exec
here