Esporta foto con data e ora nel nome file

0

Sto tentando di esportare le foto da iPhone utilizzando l'app Foto mac os.

Il problema è che non c'è modo di strutturarli in un formato che consenta di accedervi facilmente per data.

Idealmente mi piacerebbe avere nomi di file con il timestamp di una foto, qualcosa del tipo: 2017-10-03-12-05 ma non è possibile con l'app Foto.

Inoltre tollererei alcune strutture di cartelle con informazioni sulla data, ma non ho trovato alcun modo adatto.

L'unico modo che ho trovato finora è utilizzando il formato sottocartella con Nome momento che crea sottocartelle con il nome della posizione e la data

Ecco l'esempio del nome della cartella generato in questo modo:

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

Tuttavia tale nome è quasi inutilizzabile perché non c'è quasi alcun modo di filtrare tutte le foto diciamo da ottobre 2017. Gradirei davvero un nome come questo:

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

che consentirebbe facilmente l'ordinamento e la strutturazione delle mie foto.

Q: qualcuno sa come esportare le foto con più nomi utilizzabili? Apprezzerei qualsiasi modo che almeno migliorerà il modo in cui sto esportando ora.

    
posta Oleksandr Shpota 12.11.2017 - 13:33
fonte

1 risposta

1

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.

    
risposta data 03.12.2017 - 23:35
fonte

Leggi altre domande sui tag