6 votos

Exportar fotos con marca de tiempo en el nombre del archivo

Estoy intentando exportar las fotos del iPhone con la aplicación Fotos de Mac OS.

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

Lo ideal sería tener los nombres de los archivos con la marca de tiempo de una foto, algo así como: 2017-10-03-12-05 pero no es posible con la aplicación Fotos.

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

La única forma que he encontrado hasta ahora es utilizando el formato de subcarpeta con el nombre del momento que crea subcarpetas con el nombre de la ubicación y la fecha

enter image description here Aquí está el ejemplo de nombre de carpeta generado de esta manera:

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

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

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

que permita clasificar y estructurar fácilmente mis fotos.

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

1voto

qarma Puntos 71

Aunque esta no es la solución que pedías, se podría conseguir un resultado equivalente si estuvieras dispuesto a emplear un poco de AppleScript. AppleScript podría utilizarse para automatizar el proceso de exportación de Fotos y luego cambiar el nombre de los archivos que se crean en Buscador . Pero, honestamente, yo sugeriría que la exportación se haga tal y como lo estás haciendo ahora -desde la aplicación- y luego usar AppleScript para renombrar/moverlos colectivamente después.

    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 del archivo utilizando la función bash date llamado desde AppleScript con un 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 del script a continuación para completarlo.

Vale la pena decir que este código sólo funciona si los nombres de archivo exportados tienen un patrón consistente en línea con el ejemplo que has proporcionado. Específicamente, el nombre del archivo exportado necesita terminar en una fecha que ocupe las últimas tres palabras del nombre del archivo; y cualquier texto antes de él necesita tener una coma y un espacio separándolo de la parte de la fecha. Por supuesto, el código puede ajustarse en consecuencia si se elige un patrón de nomenclatura diferente, pero es mejor elegir uno y atenerse a él.

Si necesitas crear una jerarquía de directorios basada en fechas, esta porción extra de scriptcreará carpetas anidadas %Año/%Mes/%Día/ y mueve la foto al directorio correspondiente:

    -- 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 las fotos exportadas serán renombradas según la pauta anterior y organizadas en jerarquías de directorios basadas en la fecha. De nuevo, esta porción extra de código se podría haber conseguido utilizando algún do shell script (bash tiene de hecho una función preparada para crear carpetas anidadas fácilmente).

Como reflexión final, si se quisiera automatizar el todo podría adaptar este script a una acción de carpeta, y adjuntarlo a la carpeta a la que se exportan las fotos. Esto significa que, cada vez que Buscador detecta nuevas fotos añadidas a la carpeta, ejecutará automáticamente la acción de carpeta script por usted. Por lo tanto, en cuanto se exporten las fotos, se renombrarán y moverán inmediatamente.

Aquí está la primera parte del scriptde nuevo, esta vez usando un comando del shell para reformatear la parte de la fecha del nombre del 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 puedes ver, es bastante más corto en términos de número de líneas de código, aunque honestamente no podría decirte cuál será más rápido o más robusto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X