So che questo è vecchio e ha risposto, ma penso che la sceneggiatura che ho messo insieme dopo una giornata di googling e prova vale la pena di condividerlo.
Modifica le tue opzioni e questo script sposta o copia gli originali in una cartella denominata "aaaa-mm-gg Il nome dell'album". Quindi tieni traccia dei titoli degli album originali e tutte le foto sono ordinate per giorno.
Modifica per adattarsi alle tue esigenze. Faccio questo per poter avere una base di file condivisa di foto originali sincronizzate da dropbox e tutti gli utenti che condividono possono avere la loro copia di Photos.app che la usa come base per le foto di riferimento .
Cerca di evitare di sovrascrivere le foto con lo stesso nome, verificando innanzitutto se esiste già un file non identico nello stesso percorso.
Inoltre, imposta il timestamp delle cartelle appena create sulla data degli eventi che hanno. Bello per ordinare eventi per data nel finder o altro, anche se i nomi delle cartelle iniziano già con la data (perché se li copi altrove, i timestamp possono cambiare comunque).
È compatibile con le virgolette singole nei nomi degli album. Potrebbe essere compatibile con le virgolette, ma NON l'ho provato.
#!/bin/bash
#### A few options ####
#dryrun=1
dryrun=0
# Choose to duplicate (slow, space eating) or move (space saving, fast if on same drive).
#action=cp
action=mv
# set your paths
# origin:
libr="Photos Library.photoslibrary"
# destination:
destpath="MyProperlyOrganizedFotos"
# no idea why Apple chooses a funny date. Adjust to your time-zone needs
dateoffset=978307200
#### End of options ####
sqllib="${libr}"/Database/apdb/Library.apdb
s="sqlite3 ${sqllib}"
#${s} 'select fileName,imageDate,imagePath,projectUuid from RKMaster'
${s} 'select fileName,imageDate,imagePath,projectUuid from RKMaster' | sed 's,",thisisaquotationmark,g' | while read -r line; do
echo $line
name='echo "$line" | awk 'BEGIN {FS="|"} {print $1}''
date='echo "$line" | awk 'BEGIN {FS="|"} {print $2}''
path='echo "$line" | awk 'BEGIN {FS="|"} {print $3}''
albumid='echo "$line" | awk 'BEGIN {FS="|"} {print $4}''
albumname='${s} "select name from RKFolder where uuid == '${albumid}'" | sed -e 's,/,:,g' -e 's,!,,g' -e 's,",thisisaquotationmark,g''
realdate='date -r $(( ${dateoffset} + ${date} )) '+%Y-%m-%d' '
touchdate='date -r $(( ${dateoffset} + ${date} )) '+%Y%m%d1200' '
# does this file still exist? or did we move it already?
src='echo ${libr}/Masters/${path} | sed 's/thisisaquotationmark/\"/g''
if [ ! -f "${src}" ]; then
continue
fi
# trim:
newpath='echo $realdate $albumname | sed 's/thisisaquotationmark/\\"/g''
if [ ! $dryrun -eq 1 ]; then
expandednewpath='echo ${newpath}'
mkdir -p "${destpath}/${newpath}"
touch -t ${touchdate} "${destpath}/${newpath}"
fi
target="${destpath}/${newpath}/${name}"
index=0
# add an integer index to a file if the name exists in this path already
while [ -f "${target}" ] && ! cmp --silent "${target}" "${src}" ; do
echo 'Avoiding overwrite: ' $index
index=$(( $index + 1 ))
target="${destpath}/${newpath}/${name} $index"
done
if [ $dryrun -eq 1 ]; then
echo "Would do ${action} '${src}' '${target}' "
else
echo "${action} '${src}' '${target}' "
${action} "${src}" "${target}"
fi
done