Anche se questa non è la soluzione che stavi chiedendo, un risultato equivalente potrebbe essere raggiunto se tu fossi disposto a impiegare un po 'di AppleScript. È possibile utilizzare AppleScript per automatizzare il processo di esportazione da Foto e quindi rinominare i file creati in Finder . Ma, onestamente, suggerirei che l'esportazione venga eseguita proprio come lo state facendo ora - dall'interno dell'applicazione - e quindi utilizzate AppleScript per rinominarli / spostarli collettivamente in seguito.
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
Puoi anche scegliere di formattare la parte data del nome file usando la funzione bash date
chiamata da AppleScript con un comando do shell script
, che riduce il numero di righe del codice in generale.
do shell script "date -j -f '%B %d, %Y' 'October 19, 2017' '+%F'"
--> "2017-10-19"
Ho incollato questa versione più breve dello script qui sotto per completezza.
Vale la pena dire che questo codice funziona solo se i nomi dei file esportati sono coerenti con l'esempio che hai fornito. In particolare, il nome file esportato deve terminare in una data che occupa le ultime tre parole del nome file; e qualsiasi testo prima di aver bisogno di avere una virgola e uno spazio che lo separa dalla porzione di data. Naturalmente, il codice può essere regolato di conseguenza se viene scelto un modello di denominazione diverso, ma è meglio sceglierne uno e attenersi ad esso.
Se è necessario creare una gerarchia di directory in base alle date, questa porzione extra di script creerà le cartelle annidate % Year /% Month /% Day / e sposterà la foto nella directory appropriata:
-- 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
Ora tutte le tue foto esportate verranno ridenominate secondo le tue linee guida sopra e organizzate in gerarchie di directory basate sulla data. Ancora una volta, questa porzione extra di codice potrebbe essere stata raggiunta usando alcuni comandi do shell script
(bash in realtà ha una funzione già pronta per creare facilmente cartelle nidificate).
Come ultima considerazione, se si desidera automatizzare il processo intero , è possibile adattare questo script a un'azione di cartella e collegarlo alla cartella in cui vengono esportate le foto. Ciò significa che, ogni volta che Finder rileva nuove foto aggiunte alla cartella, verrà eseguito automaticamente lo script di azione della cartella. Pertanto, non appena le foto vengono esportate, verranno immediatamente ridenominate e spostate di conseguenza.
Ecco di nuovo la prima parte dello script, questa volta utilizzando un comando shell per riformattare la parte data del nome file:
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
Come puoi vedere, è un po 'più breve in termini di numero di righe di codice, anche se non posso dirti onestamente quale sarà più veloce o più robusto.