Exportar fotos con marca de tiempo en nombre de archivo

0

Estoy intentando exportar fotos desde iPhone usando la aplicación Mac os Photos.

El problema es que no hay forma de estructurarlos en un formato que permita acceder fácilmente a ellos por fecha.

Idealmente, me gustaría tener los nombres de archivo con la marca de tiempo de una foto, algo como: 2017-10-03-12-05 pero no es posible con la aplicación Fotos.

También toleraría la estructura de algunas carpetas con información de fecha, pero no he encontrado ninguna forma adecuada.

La única forma que encontré hasta ahora es mediante el uso de un formato de subcarpeta con Moment Name, que crea subcarpetas con el nombre de la ubicación y la fecha

Este es el ejemplo del nombre de carpeta generado de esta manera:

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

Sin embargo, dicho nombre es casi inutilizable porque casi no hay forma de filtrar todas las fotos, digamos, desde octubre de 2017. Realmente apreciaría un nombre como este:

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

que permitiría ordenar y estructurar fácilmente mis fotos.

P: ¿Alguien conoce alguna forma de exportar fotos con nombres más utilizables? Apreciaría cualquier forma que al menos mejore la forma en que estoy exportando ahora.

    
pregunta Oleksandr Shpota 12.11.2017 - 13:33

1 respuesta

1

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.

    
respondido por el CJK 03.12.2017 - 23:35

Lea otras preguntas en las etiquetas