Bien que ce ne soit pas la solution que vous souhaitiez, un résultat équivalent pourrait être obtenu si vous étiez prêt à utiliser un peu d'AppleScript. AppleScript pourrait être utilisé pour automatiser le processus d'exportation à partir de Photos puis renommez les fichiers qui sont créés en Finder . Mais, honnêtement, je suggérerais que l'exportation soit effectuée comme vous le faites actuellement - à partir de l'application - et que vous utilisiez ensuite AppleScript pour les renommer/déplacer collectivement.
tell application "System Events"
set ExportPath to POSIX file "/path/to/exported/photos" as alias
set ExportedPhotos to every file in ExportPath
end tell
repeat with PhotoFile in ExportedPhotos
tell application "System Events" to set Filename to name of PhotoFile
--> e.g. "Schloßpark Nymphenburg - Munich, Bavaria, October 19, 2017.jpg"
set [file_extension, theYear, theDay, theMonth] to reverse of words of Filename
--> {"jpg", "2017", "19", "October", "Bavaria", "Munich", "Nymphenburg", "Schloßpark"}
set AppleScript's text item delimiters to " "
set PhotoDate to date ({theDay, theMonth, theYear, "12:00:00 AM"} as text)
--> date "Thursday, 19 October 2017 at 12:00:00"
set AppleScript's text item delimiters to "-"
set {theYear, theMonth, theDay} to {year of PhotoDate as text, ¬
text -2 thru -1 of ("0" & (month of PhotoDate) * 1), ¬
text -2 thru -1 of ("0" & day of PhotoDate)}
--> {"2017", "10", "19"}
set isoDate to result as text
--> "2017-10-19"
set AppleScript's text item delimiters to ", " & month of PhotoDate
first text item of Filename
--> "Schloßpark Nymphenburg - Munich, Bavaria"
set Filename to [isoDate, " - ", result, ".", file_extension] as text
--> "2017-10-19 - Schloßpark Nymphenburg - Munich, Bavaria.jpg"
tell application "System Events" to set the name of PhotoFile to Filename
end repeat
Vous pouvez également choisir de formater la partie date du nom de fichier en utilisant la fonction bash date
appelé depuis AppleScript avec un do shell script
ce qui permet de réduire le nombre de lignes de code dans l'ensemble.
do shell script "date -j -f '%B %d, %Y' 'October 19, 2017' '+%F'"
--> "2017-10-19"
J'ai collé cette version plus courte du script ci-dessous pour être complet.
Il est utile de préciser que ce code ne fonctionne que si les noms de fichiers exportés sont d'un modèle cohérent, conformément à l'exemple que vous avez fourni. Plus précisément, le nom du fichier exporté doit se terminer par une date qui occupe les trois derniers mots du nom du fichier ; et tout texte qui précède doit être séparé de la partie date par une virgule et un espace. Bien entendu, le code peut être adapté en conséquence si un autre modèle de dénomination est choisi, mais il est préférable d'en choisir un et de s'y tenir.
Si vous devez créer une hiérarchie de répertoires basée sur des dates, cette partie supplémentaire du script créera des dossiers imbriqués. %Année/%Mois/%Jour/ et déplacez la photo dans le répertoire approprié :
-- Continuing the script above from the following line
-- (the "[to]" is now omitted to create a "tell" block)
tell application "System Events" [to]
set the name of PhotoFile to Filename
set NestedFolders to [ExportPath, theYear, theMonth, theDay]
repeat until number of NestedFolders is 1
set [This, NestedFolders] to [item 1, rest] of NestedFolders
set Child to first item of NestedFolders
if not (exists folder Child of This) then
set first item of NestedFolders to ¬
(make new folder at folder (POSIX path of This) with properties {name:Child})
else
set first item of NestedFolders to folder Child of This
end if
end repeat
move (alias Filename in ExportPath) to POSIX path of (first item of NestedFolders)
end tell
Maintenant, toutes vos photos exportées seront renommées selon vos directives ci-dessus, et organisées dans des hiérarchies de répertoires basées sur la date. Une fois de plus, cette portion de code supplémentaire aurait pu être réalisée en utilisant des fichiers do shell script
(bash possède en fait une fonction prête à l'emploi pour créer facilement des dossiers imbriqués).
En guise de conclusion, si vous vouliez automatiser la ensemble du site vous pourriez adapter ce script à une action de dossier, et l'attacher au dossier dans lequel vos photos sont exportées. Cela signifie que, chaque fois que Finder détecte les nouvelles photos ajoutées au dossier, il exécutera automatiquement l'action du dossier script pour vous. Par conséquent, dès que les photos seront exportées, elles seront immédiatement renommées et déplacées en conséquence.
Voici à nouveau la première partie du script, en utilisant cette fois une commande shell pour reformater la partie date du nom de fichier :
tell application "Finder"
set PhotoFile to file "Schloßpark Nymphenburg - Munich, Bavaria, October 19, 2017.png" in desktop as alias
set Filename to name of PhotoFile
--> e.g. "Schloßpark Nymphenburg - Munich, Bavaria, October 19, 2017.jpg"
set Extension to name extension of PhotoFile
end tell
set AppleScript's text item delimiters to {", ", "." & Extension}
text items -3 thru -2 of Filename as text
--> "October 19, 2017"
do shell script "date -j -f '%B %d, %Y' " & quoted form of result & " '+%F'"
set isoDate to result
--> "2017-10-19"
text items 1 thru -4 of Filename as text
--> "Schloßpark Nymphenburg - Munich, Bavaria"
set Filename to [isoDate, " - ", result, ".", Extension] as text
--> "2017-10-19 - Schloßpark Nymphenburg - Munich, Bavaria.jpg"
tell application "Finder" to set the name of PhotoFile to Filename
Comme vous pouvez le constater, il est un peu plus court en termes de nombre de lignes de code, bien que je ne puisse pas honnêtement vous dire lequel sera le plus rapide ou le plus robuste.