Exportar fotos com registro de data e hora no nome do arquivo

1

Estou tentando exportar fotos do iPhone usando o aplicativo mac os Photos.

O problema é que não há como estruturá-los em um formato que permita acessá-los facilmente por data.

Idealmente, gostaria de ter nomes de arquivos com timestamp de uma foto, algo como: 2017-10-03-12-05mas não é possível com o aplicativo Fotos.

Eu também toleraria algumas estruturas de pastas com informações de data, mas não encontrei nenhuma maneira adequada.

A única maneira que encontrei até agora é usando o formato de subpasta com o Nome do momento, que cria subpastas com o nome do local e da data.

insira a descrição da imagem aqui Aqui está o exemplo do nome da pasta gerado desta maneira:

Schloßpark Nymphenburg - Munich, Bavaria, October 19, 2017

No entanto, esse nome é quase inutilizável porque quase não há maneira de filtrar todas as fotos, digamos, a partir de outubro de 2017. Eu realmente aprecio o nome assim:

2017-10-19 - Schloßpark Nymphenburg - Munich, Bavaria

o que permitiria facilmente classificar e estruturar minhas fotos.

P: Alguém conhece alguma maneira de exportar fotos em nomes mais utilizáveis? Eu apreciaria qualquer forma que, pelo menos, melhoraria a maneira como estou exportando agora.

Sasha Shpota
fonte

Respostas:

1

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 datechamada de AppleScript com um do shell scriptcomando, 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 scriptcomandos (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.

CJK
fonte
Uau. Obrigado. Vou tentar entender e usar esse script. A propósito, você pode organizar o código e colocá-lo no GitHub para que todos possam usá-lo como um lib / script.
Sasha Shpota