Une partie du nom des fichiers dans leurs commentaires

Didjo

Membre actif
9 Novembre 2003
967
85
Paris
Bonjour !

Je suis en train de ranger une série de fichiers et aimerais ajouter une année à leurs commentaires Spotlight.
En gros, j'ai beaucoup de fichiers (donc manuellement on oublie) dont le nom est "[texte] - [texte] ([date])", et j'aimerais – pour chaque fichier – récupérer le [date] pour le définir comme son commentaire.

Aucun logiciel de renommage de masse ne semble pouvoir toucher aux commentaires, et la seule solution qui me semble possible est Automator. J'ai ajouté le PHP (que je maitrise pour gérer la récupération de [date]) au scripts shell possible, mais je coince au niveau de la récupération du résultat pour chaque fichier...

Une idée ? Un logiciel à côté duquel je suis passé ?

Merci ! :zen:
 
Avec le langage de ton choix (Perl, PHP, Ruby, Python voire avec bash [qui les intègre très bien]) il te faut utiliser une expression rationnelle grâce à laquelle tu récupèreras dans des variables les divers constituants du nom des fichiers. Après tu peux utiliser ces variables avec la commande mdfind pour modifier les attributs Spotlight des fichiers.
 
On parle toujours d'Automator ? D'un Perl/PHP/Ruby/Python exécuté en local ? Je pensais pas mais je suis perdu à la première réponse. Merci d'ailleurs ! :)
 
Tu parlais de scripts PHP, je soulignais juste que de nombreux langages sont à ta disposition. Tu peux exécuter un script dans Automator (et j'ai bien l'impression que c'est ce que tu souhaites faire, non ?)
 
C'est effectivement ce que je peux faire, mais sur un processus comme celui-ci :

  • "Obtenir les éléments du Finder indiqués"
  • "Exécuter un script Shell (/usr/bin/php)"
  • "Définir des commentaires Spotlight dans le Finder"
J'ai pas l'impression que le troisième élément soit très efficace (il semble attribuer le même commentaire prédéfinis et ne pas accépter de variable en entrée). Est-ce qu'mdfind est sensé faire le boulot ?
Mon script PHP peut-il modifier les commentaires d'un fichier ? (Comment ?)

:zen:
 
Je n'aime pas beaucoup Automator (j'en suis resté à la première ou seconde version, avec des limitations frisant le ridicule) donc je ne pourrai pas trop t'aider à son sujet.
Plus fin que Automator, il y a aussi AppleScript (que je ne connais pas davantage ;))

Maintenant si tu restes à PHP, tu peux parfaitement exécuter des commandes depuis un script PHP avec la fonction shell_exec par exemple, mais aussi system et d'autres plus pointues (regarde à gauche, dans la page en lien).
 
Jamais utilisé Automator plus que ça non plus, mais pour le coup si je peux faire ça avec un p'tit PHP (J'ai jamais réussi à bien assimiler l'AppleScript) sans avoir à lancer MAMP et cie, ça peut être pas mal...

Ok, donc PHP tout près, récupérant le [date] qui m'interesse... Le seul problème : impossible de trouver comment modifier les commentaires Spotlight d'un fichier avec une commande shell... mdfing semble ne faire que lire, et à part ça qui ne m'aide pas beaucoup, je vois pas...

Edit
Un truc comme ça :
xattr -p com.apple.metadata:kMDItemWhereFroms [path_to_file]
m'indique "No such xattr: com.apple.metadata:kMDItemWhereFroms"
 
Dernière édition:
Bonjour,

Via Applescript tu dois pouvoir modifier les commentaires attachés aux fichiers.

L'image jointe montre la propriété "comment" (tirée du dictionnaire Finder).

En faisant un "Lire les informations" sur un fichier, je ne vois qu'un champ "Commentaires Spotlight", j'imagine qu'il s'agit du même que la propriété "comment" ainsi décrite.

Cordialement,

Nicolas
 
Hey ! Merci pour cette participation :)

Je pense effectivement qu'il serait assez simple de passer par AppleScript (et d'en faire un service ou un droplet), mais les regex ont l'air différentes sur AppleScript (il faut passer par une commande shell), et là je coince...

Edit 1

Ok, j'ai exécuté php via shell et exécuté ce shell via AppleScript... Ce qui donne ceci, ce script étant un droplet :
Bloc de code:
on open of finderObjects
    repeat with i in (finderObjects)
        if folder of (info for i) is false then
            set i_name to name of (info for i)
            set php_script to "$source = $argv[1];
if ($source != '-') {
    preg_match('/^.+ - .+ \\(([0-9]+)\\)\\.*.*$/i', $source, $matches);
    echo $matches[1];
}"
            set i_year to do shell script "/usr/bin/php -r " & quoted form of php_script & " " & quoted form of i_name
            set comment of i to i_year
        end if
    end repeat
end open
Je récupère bien ma date dans i_year, sauf que j'ai un stack overflow quand j'exécute...

Edit 2

Ça marche quand le script n'est pas un droplet, mais exécuté en récupérant les éléments du finder sélectionnés... Voici le code :
Bloc de code:
tell application "Finder"
    activate
    set these_items to the selection
    log these_items
    repeat with this_item in these_items
        set item_name to (get displayed name of this_item)
        if item_name is not ".DS_Store" then
            set php_script to "$source = $argv[1];
if ($source != '-') {
    preg_match('/^.+ - .+ \\(([0-9]+)\\)\\.*.*$/i', $source, $matches);
    echo $matches[1];
}"
            set item_year to do shell script "/usr/bin/php -r " & quoted form of php_script & " " & quoted form of item_name
            set comment of this_item to item_year as string
        end if
    end repeat
end tell

C'est donc "set comment of i to i_year" du droplet (edit 1) qui coince (surement parce-que le script n'a pas à faire au fichier lui même mais à un alias, ou quoi)...

Du coup c'est juste par curiosité, mais : une idée pour que le droplet fonctionne ?

Merci :)
 
Dernière édition:
Oui, mais je veux appliquer le script uniquement à certains fichiers, une seule fois quand je les trie, pas à d'autres et pas automatiquement...
Mais merci beaucoup !