Je sais que c'est vieux et répondu, mais je pense que le script que j'ai mis ensemble après une journée de googling et d'essais vaut la peine d'être partagé.
Modifiez vos options, et ce script déplace ou copie vos originaux dans un dossier nommé 'yyyy-mm-dd Your Album Name'. Ainsi, vous gardez la trace des titres de vos albums originaux, et toutes les photos sont également triées par jour.
Modifiez pour répondre à vos besoins. Je fais cela pour pouvoir avoir une base de fichiers partagée de photos originales synchronisées par Dropbox, et tous les utilisateurs qui partagent peuvent avoir leur propre copie de Photos.app et l'utiliser comme base pour les photos référencées.
Il tente d'éviter d'écraser les photos portant le même nom, en vérifiant d'abord si un fichier non identique existe déjà au même endroit.
De plus, il fixe l'horodatage des dossiers nouvellement créés à la date des événements qu'ils contiennent. C'est pratique pour trier les événements par date dans le finder ou autre, bien que les noms de dossiers commencent déjà par la date (parce que si vous les copiez ailleurs, les horodatages peuvent changer de toute façon).
Il est compatible avec les guillemets simples dans les noms d'albums. Il peut être compatible avec les guillemets, mais je ne l'ai PAS testé.
#!/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
2 votes
Tout dépend si vous voulez les modifications actuelles de chaque image ou le fichier principal. Pour les modifications actuelles, vous devez exporter. Les fichiers maîtres peuvent être extraits de la bibliothèque en gros.
2 votes
Vous devez avoir votre disque formaté en ExFAT pour que le PC Windows puisse lire votre disque.
1 votes
Ou vous devrez utiliser un logiciel tiers sur le PC pour lui permettre de lire un disque Mac.