7
votes

Comment puis-je modifier les métadonnées de fichiers dans OS X?

Est-ce que quelqu'un sait s'il est possible de modifier directement les métadonnées de fichiers sur OS X. Spécifiquement dans Perl. Le paramètre que je tente spécifiquement de changer est kmditemfslabel (la couleur du fichier). J'ai eu une recherche autour de moi et je n'arrive pas à trouver un moyen de le faire sans utiliser de module tel que Mac :: Colle ou une application externe (Finder).


0 commentaires

4 Réponses :


1
votes

Il n'y a pas de fonction intégrée dans Perl pour fonctionner sur les métadonnées du système de fichiers Mac. Soit votre utilisation une bibliothèque de CPAN ou l'écrire vous-même, probablement pas aussi bien que l'auteur de celui de CPAN.


0 commentaires

10
votes

Le kmditemfslabel code> est une propriété du Finder. Vous devez utiliser un moyen de communiquer avec le Finder pour modifier ses données. Autant que je sache, il n'ya pas de morve que vous pouvez tordre avec Perl pour modifier les données du Finder sans passer par le Finder.

Il y a plusieurs façons de faire ceci: p>

  1. Utilisez Camelbones lorsque la nouvelle version sort. Qui permet à un pont d'objectif c de Perl. Ensuite, vous devrez utiliser la méthode Apple avec les appels de système de cacao. Courbe d'apprentissage escarpée pour cacao ... p> li>

  2. Si vous avez des outils de développeurs, utilisez / développeur / outils / setfile (si cela prend en charge l'élément de métadonnées) p> li>

  3. Utilisez OsAscript pour envoyer le message au Finder pour modifier la couleur du fichier. Vous pouvez regarder Ce plus tôt Donc, post pour les astuces pour le faire. P> li> OL>

    La plupart des ponts C / COCOA liés à la PERL sont morts malheureusement. Macperl n'a pas été mise à jour depuis 2005. P>

    Presque toutes les méthodes les plus faciles nécessitent de savoir au moins une quantité minimale d'AppleScript et d'appeler le texte de ce script, bien qu'un appel interpolé soit un appel sur Osascript . P>

    dans sa forme de 1 ligne, Osascript rend Perl look magnifique: p> xxx pré>

    Pour utiliser Osascript à partir de Perl, la plupart utilisent un document ici. Il y a des exemples de je réserve que j'ai appelé AppleScript - le guide définitif et de Brian D Foy sur contrôler iTunes avec Perl . p>

    Voici un script à Perl I écrit pour la définition de la couleur du fichier à l'aide d'OSAScript: p>

    #!/usr/bin/perl
    use strict; use warnings;
    use File::Spec;
    use String::ShellQuote; 
    
    sub osahere  { 
        my $rtr;
        my $scr='osascript -ss -e '."'".join ('',@_)."'";
        open my $fh, '-|', $scr or die "death on osascript $!";
        $rtr=do { local $/; <$fh> };
        close $fh or die "death on osascript $!";
        return $rtr;
    }
    
    sub set_file_color {
    # -- No color = 0
    # -- Orange = 1
    # -- Red = 2
    # -- Yellow = 3
    # -- Blue = 4
    # -- Purple = 5
    # -- Green = 6
    # -- Gray = 7
    
    my $file=shift;
    my $color=shift || 0;
    $color=0 if $color<0;
    $color=7 if $color>7;
    
    $file=File::Spec->rel2abs($file) 
        unless File::Spec->file_name_is_absolute( $file );
    $file=shell_quote($file);
    
    return undef unless -e $file;
    
    my $rtr=osahere <<"END_SET_COLOR" ;
    tell application "Finder"
        set f to "$file"
        set ItemToLabel to POSIX file f as alias
        set the label index of ItemToLabel to $color
    end tell
    END_SET_COLOR
    
    return $rtr;
    }
    
    set_file_color("2591.txt",2);
    


1 commentaires

Merci pour la réponse géniale. C'était exactement ce que je cherchais.



1
votes

Ce n'est pas si compliqué à mettre en œuvre. Vous pouvez utiliser la commande xattr code> comme indiqué dans la chaîne DOC ci-dessous ... J'ai enveloppé la fonction de base dans un script Python qui applique des couleurs nommées à une série de fichiers ...

#!/usr/bin/env python

"""
==================================
LABELCOLOR.PY - Colorize Finder labels of files

Usage:
  labelcolor.py [color] *.jpg

  where color is a name or abbreviation as defined below:
    clear (c), gray (a), green (g), purple (p), 
    blue (b), yellow (y), red (r), orange (o)

The shell command used is:
  xattr -wx com.apple.FinderInfo \
  0000000000000000000400000000000000000000000000000000000000000000 myfile.txt
where 04 in the middle of the zeroes is the color definition
==================================
"""
import sys
import os
import subprocess

def colorizeFile(ColorName,FileName):
    ReverseTable = {
         "clear"  :  "01",
         "gray"   :  "03",
         "green"  :  "04",
         "purple" :  "06",
         "blue"   :  "09",
         "yellow" :  "0A",
         "red"    :  "0C",
         "orange" :  "0E",
         "c"      :  "01",
         "a"      :  "03",
         "g"      :  "04",
         "p"      :  "06",
         "b"      :  "09",
         "y"      :  "0A",
         "r"      :  "0C",
         "o"      :  "0E",
    }

    HexString = 18*"0" + ReverseTable.get(ColorName) + 44*"0"
    Xcommand = 'xattr -wx com.apple.FinderInfo {0} {1}'.format(HexString,FileName)
    ProcString = subprocess.check_call(Xcommand, stderr=subprocess.STDOUT,shell=True) 

if __name__ == "__main__":
    if len(sys.argv)<3:
        sys.stderr.write(__doc__.format(sys.argv[0]))
    else:
        Cname = sys.argv[1]
        Flist = sys.argv[2:]
        for File in Flist:
            colorizeFile(Cname.lower(),File)
        sys.stderr.write("## Colorized {0} file(s) as {1}\n".format(len(Flist),Cname))


0 commentaires

0
votes

Cette question et répondit il y a longtemps. Depuis lors, le monde

  • the Le projet est un binaire qui vous permet de manipuler des étiquettes (anciennement appelées labels ).

  • XATTR permet Vous obtenez et définir toutes sortes de choses. C'est ce que j'utilise principalement. Par exemple, avec mojolicious, j'aime ajouter com.apple.metadata: kmditemwhereFoms aux choses que je télécharge.


0 commentaires