Embora esta não seja a solução que você estava pedindo, um resultado equivalente poderia ser alcançado se você estivesse disposto a empregar um pouco de AppleScript. O AppleScript pode ser usado para automatizar o processo de exportação do Photos e renomear os arquivos criados no Finder . Mas, sinceramente, sugiro que a exportação seja feita exatamente como você está fazendo agora - de dentro do aplicativo - e depois use o AppleScript para renomear / movê-los coletivamente depois.
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
Você também pode optar por formatar a parte da data do nome do arquivo usando a função bash date
chamada de AppleScript com um do shell script
comando, que reduz o número de linhas de código em geral.
do shell script "date -j -f '%B %d, %Y' 'October 19, 2017' '+%F'"
--> "2017-10-19"
Eu colei esta versão mais curta do script abaixo para completar.
Vale a pena dizer que esse código só funciona se os nomes de arquivos exportados forem de um padrão consistente, de acordo com o exemplo que você forneceu. Especificamente, o nome do arquivo exportado precisa terminar em uma data que ocupe as três últimas palavras do nome do arquivo; e qualquer texto antes dele precisa ter uma vírgula e um espaço separando-o da parte da data. É claro que o código pode ser ajustado de acordo se um padrão de nomenclatura diferente for escolhido, mas é melhor escolher um e ficar com ele.
Se você precisar criar uma hierarquia de diretórios com base em datas, essa parte extra do script criará pastas aninhadas % Year /% Month /% Day / e moverá a foto para o diretório apropriado:
-- 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
Agora, todas as suas fotos exportadas serão renomeadas de acordo com sua diretriz acima e organizadas em hierarquias de diretórios baseadas em data. Novamente, essa parte extra do código poderia ter sido obtida usando alguns do shell script
comandos (bash na verdade tem uma função pronta para criar pastas aninhadas facilmente).
Como um pensamento final, se você quisesse automatizar todo o processo, poderia adaptar esse script a uma ação de pasta e anexá-lo à pasta na qual suas fotos são exportadas. Isso significa que, sempre que o Finder detectar novas fotos adicionadas à pasta, ele executará automaticamente o script de ação da pasta para você. Portanto, assim que as fotos forem exportadas, elas serão imediatamente renomeadas e movidas de acordo.
Aqui está a primeira parte do script novamente, desta vez usando um comando shell para reformatar a parte da data do nome do arquivo:
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 você pode ver, é um pouco mais curto em termos do número de linhas de código, embora eu não pudesse lhe dizer honestamente qual será mais rápido ou mais robusto.