Sé que esto es antiguo y está respondido, pero creo que vale la pena compartir el guión que armé después de un día de buscar y buscar en Google.
Modifique sus opciones, y esta secuencia de comandos mueve o copia sus originales a una carpeta llamada 'aaaa-mm-dd Nombre de su álbum'. Así que mantienes un registro de los títulos de tus álbumes originales, y todas las fotos también se ordenan por día.
Modifíquelo para adaptarlo a sus necesidades. Hago esto para poder tener una base de archivos compartidos de fotos originales sincronizadas con Dropbox, y todos los usuarios que comparten pueden tener su propia copia de Photos.app y usarla como base para las fotos de referencia. .
Intenta evitar sobrescribir fotos con el mismo nombre, verificando primero si ya existe un archivo no idéntico en la misma ruta.
Además, establece la marca de tiempo de las carpetas recién creadas a la fecha de los eventos que tienen. Es agradable ordenar los eventos por fecha en el buscador o lo que sea, aunque los nombres de las carpetas ya comienzan con la fecha (porque si los copia en otro lugar, las marcas de tiempo pueden cambiar de todos modos).
Es compatible con comillas simples en los nombres de álbumes. Puede ser compatible con comillas, pero NO lo he probado.
#!/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