6 votes

Exportation de photos avec horodatage dans le nom de fichier

J'essaie d'exporter des photos de mon iPhone à l'aide de l'application Photos de Mac OS.

Le problème est qu'il n'y a aucun moyen de les structurer dans un format qui permette d'y accéder facilement par date.

Idéalement, j'aimerais avoir des noms de fichiers avec l'horodatage d'une photo, quelque chose comme.. : 2017-10-03-12-05 mais ce n'est pas possible avec l'application Photos.

Je tolérerais également une structure de dossiers avec des informations sur les dates, mais je n'ai pas trouvé de moyen approprié.

Le seul moyen que j'ai trouvé jusqu'à présent est d'utiliser le format de sous-dossier avec Moment Name qui crée des sous-dossiers avec le nom de l'emplacement et la date

enter image description here Voici un exemple de nom de dossier généré de cette manière :

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

Cependant, ce nom est presque inutilisable car il n'y a pratiquement aucun moyen de filtrer toutes les photos, disons d'octobre 2017. J'apprécierais vraiment un nom comme celui-ci :

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

qui permettrait de trier et de structurer facilement mes photos.

Q : Quelqu'un connaît-il un moyen d'exporter des photos dans des noms plus utilisables ? J'apprécierais tout moyen qui pourrait au moins améliorer la façon dont j'exporte actuellement.

1voto

OnePablo Points 1

Bien que ce ne soit pas la solution que vous souhaitiez, un résultat équivalent pourrait être obtenu si vous étiez prêt à utiliser un peu d'AppleScript. AppleScript pourrait être utilisé pour automatiser le processus d'exportation à partir de Photos puis renommez les fichiers qui sont créés en Finder . Mais, honnêtement, je suggérerais que l'exportation soit effectuée comme vous le faites actuellement - à partir de l'application - et que vous utilisiez ensuite AppleScript pour les renommer/déplacer collectivement.

    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

Vous pouvez également choisir de formater la partie date du nom de fichier en utilisant la fonction bash date appelé depuis AppleScript avec un do shell script ce qui permet de réduire le nombre de lignes de code dans l'ensemble.

    do shell script "date -j -f '%B %d, %Y' 'October 19, 2017' '+%F'"
        --> "2017-10-19"

J'ai collé cette version plus courte du script ci-dessous pour être complet.

Il est utile de préciser que ce code ne fonctionne que si les noms de fichiers exportés sont d'un modèle cohérent, conformément à l'exemple que vous avez fourni. Plus précisément, le nom du fichier exporté doit se terminer par une date qui occupe les trois derniers mots du nom du fichier ; et tout texte qui précède doit être séparé de la partie date par une virgule et un espace. Bien entendu, le code peut être adapté en conséquence si un autre modèle de dénomination est choisi, mais il est préférable d'en choisir un et de s'y tenir.

Si vous devez créer une hiérarchie de répertoires basée sur des dates, cette partie supplémentaire du script créera des dossiers imbriqués. %Année/%Mois/%Jour/ et déplacez la photo dans le répertoire approprié :

    -- 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

Maintenant, toutes vos photos exportées seront renommées selon vos directives ci-dessus, et organisées dans des hiérarchies de répertoires basées sur la date. Une fois de plus, cette portion de code supplémentaire aurait pu être réalisée en utilisant des fichiers do shell script (bash possède en fait une fonction prête à l'emploi pour créer facilement des dossiers imbriqués).

En guise de conclusion, si vous vouliez automatiser la ensemble du site vous pourriez adapter ce script à une action de dossier, et l'attacher au dossier dans lequel vos photos sont exportées. Cela signifie que, chaque fois que Finder détecte les nouvelles photos ajoutées au dossier, il exécutera automatiquement l'action du dossier script pour vous. Par conséquent, dès que les photos seront exportées, elles seront immédiatement renommées et déplacées en conséquence.

Voici à nouveau la première partie du script, en utilisant cette fois une commande shell pour reformater la partie date du nom de fichier :

    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

Comme vous pouvez le constater, il est un peu plus court en termes de nombre de lignes de code, bien que je ne puisse pas honnêtement vous dire lequel sera le plus rapide ou le plus robuste.

0 votes

Wow. Merci. Je vais essayer de comprendre et d'utiliser ce script. Au fait, vous pouvez organiser le code et le mettre sur GitHub pour que tout le monde puisse l'utiliser comme une lib/script.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X