Les balises OSX Mavericks sont-elles visibles depuis la ligne de commande?

13

Par exemple, supposons que j'ai une structure de répertoires telle que

/Users
    /tlehman
        /Math
            algebraic_varieties.tex [tagged: Math, Documentation]
            projective_geometry.pdf [tagged: Math]
        /Development
            visualize_surfaces.py   [tagged: Math, Programming]
            solve_polynomials.scm   [tagged: Math]
    /guest
        /Desktop
            welcome.rtf             [tagged: Documentation]
/Volumes
    /USBKey
        assignments_for_may.txt     [tagged: Math]
        using_LaTeX.pdf             [tagged: Documentation]

À partir de la ligne de commande, y a-t-il un moyen que je peux utiliser ls(ou quelque chose comme ça) pour afficher tous les fichiers marqués comme "Math"?

EDIT: J'ai créé un outil appelé tfindqui fait cela: https://github.com/tlehman/bin/blob/master/tfind

tlehman
la source
2
Voir github.com/jdberry/tag
mankoff
1
J'appuie la recommandation tagde James Berry à https://github.com/jdberry. Vous pouvez l'installer via brew install tag, ajouter une balise via tag -a <tag> <file>, rechercher des balises via tag -f <tag1, tag2>. Très, très pratique, je l'utilise tout le temps.
Chris Conover
Oui, obtenez définitivement la tagcommande. S'installe très facilement via l'infusion.
Jacob

Réponses:

11

Je suppose qu'ils seront un xattr comme ils le sont actuellement sur 10.8.3 (et plus anciens)

Actuellement, vous pouvez afficher les attributs étendus d'un fichier avec ls -l@.

Mais pour voir le contenu des attributs, vous devez utiliser xattr.

sage
la source
Vous aviez raison, les balises sont stockées sous forme de xattr
tlehman
Pour votre information: Avec OS X El Capitan, je la commande, xattr -pl com.apple.metadata:_kMDItemUserTags filename. Cependant, ce n'était pas une sortie très conviviale.
LS
13

Oui, vous pouvez trouver des fichiers qui ont une balise utilisateur donnée en utilisant mdfind.

Créez un fichier et attribuez-lui une balise personnalisée dans le Finder.

Allez ensuite dans un terminal; vous le trouverez avec:

mdfind "kMDItemUserTags == Math || kMDItemUserTags == Programming"

ou

mdfind "kMDItemUserTags == Math && kMDItemUserTags == Programming"

Voir aussi -onlyin aFolderpour restreindre la recherche.

Je n'ai pas vérifié la complexité de ces expressions booléennes, mais ces deux exemples fonctionnent.

Vous pouvez diriger la sortie lscomme ceci:

mdfind "kMDItemUserTags == mathTag || kMDItemUserTags == anotherTag" \
| while read f; do ls "$f"; md5 "$f"; done

De plus, mdfind a une option "-0"

    -0                Use NUL (``\0'') as a path separator, for use with xargs -0.

ce qui peut être pratique avec des noms de fichiers désagréables.

alecail
la source
Le problème avec cette méthode est qu'elle ne trouve pas tous les fichiers, renvoyant uniquement un sous-ensemble de fichiers (éventuellement vide).
markvgti
3
Il semble qu'ils ont introduit une procédure simplifiée mdfindsyntaxe des balises, par exemple: mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
WJV
1
@AntoineLecaille J'ai 295 fichiers dans un répertoire avec le tag "Orange" (le Label Orange avant de passer à Mavericks). Cette commande n'en répertorie que 11. Ont également de nombreux fichiers étiquetés "verts" --- cette commande ne trouve aucun d'entre eux.
markvgti
1
@wjv J'ai utilisé la syntaxe que vous avez suggérée et j'ai obtenu exactement les mêmes résultats que ceux énumérés ci-dessus.
markvgti
1
@markvgti Ensuite, prenez un fichier Orange qui se trouve avec cette commande et un qui ne l'est pas, et trouvez les différences avec xattr ou mdls?
alecail
4

Vous pouvez obtenir toutes les balises d'un fichier avec:

mdls -name kMDItemUserTags filename

Christian A. Strømmen
la source
Cela semble être l'inverse de ce qui a été demandé. Votre commande vide toutes les balises d'un seul fichier. Je pense que l'OP veut connaître tous les fichiers avec une seule balise.
bmike
2
Toujours utile. Cela répond à la question que j'avais quand je suis allé sur Google et je me suis retrouvé ici. S'il n'y a pas un autre Q / A qui couvre cela, cela pourrait valoir la peine de poster et de répondre vous-même.
Slipp D. Thompson,