Si bien esta no es la solución que estaba solicitando, se podría lograr un resultado equivalente si estuviera dispuesto a emplear un poco de AppleScript. AppleScript podría utilizarse para automatizar el proceso de exportación desde Fotos y luego cambiar el nombre de los archivos que se crean en Finder . Pero, honestamente, sugeriría que la exportación se realice tal como lo está haciendo ahora, desde dentro de la aplicación, y luego use AppleScript para renombrarlos o moverlos de forma colectiva posteriormente.
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
También puede optar por formatear la parte de la fecha del nombre de archivo utilizando la función bash date
llamada desde AppleScript con un comando do shell script
, lo que reduce el número de líneas de código en general.
do shell script "date -j -f '%B %d, %Y' 'October 19, 2017' '+%F'"
--> "2017-10-19"
He pegado esta versión más corta de la secuencia de comandos a continuación para completarla.
Vale la pena decir que este código solo funciona si los nombres de los archivos exportados son de un patrón consistente en línea con el ejemplo que proporcionó. Específicamente, el nombre de archivo exportado debe terminar en una fecha que ocupa las últimas tres palabras del nombre de archivo; y cualquier texto antes de que tenga que tener una coma y un espacio que lo separa de la parte de la fecha. Por supuesto, el código se puede ajustar en consecuencia si se elige un patrón de nomenclatura diferente, pero es mejor elegir uno y seguirlo.
Si necesita crear una jerarquía de directorios basada en fechas, esta parte adicional del script creará carpetas anidadas % Año /% Mes /% Día / y moverá la foto al directorio apropiado:
-- 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
Ahora todas sus fotos exportadas serán renombradas según su guía anterior, y se organizarán en jerarquías de directorios basadas en fechas. Nuevamente, esta porción extra de código podría haberse logrado usando algunos comandos do shell script
(bash en realidad tiene una función preparada para crear carpetas anidadas fácilmente).
Como idea final, si desea automatizar el proceso completo , puede adaptar este script a una acción de carpeta y adjuntarlo a la carpeta a la que se exportan sus fotos. Esto significa que, cada vez que Finder detecte nuevas fotos agregadas a la carpeta, ejecutará automáticamente la secuencia de comandos de la carpeta. Por lo tanto, tan pronto como las fotos se exporten, inmediatamente se les cambiará el nombre y se moverán en consecuencia.
Aquí está la primera parte de la secuencia de comandos nuevamente, esta vez usando un comando de shell para reformatear la parte de la fecha del nombre de archivo:
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
Como puede ver, es un poco más corto en cuanto al número de líneas de código, aunque honestamente no podría decirle cuál será más rápido o más robusto.