Sind die OSX Mavericks-Tags in der Befehlszeile sichtbar?

13

Angenommen, ich habe eine Verzeichnisstruktur wie

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

Kann ich über die Befehlszeile lsalle Dateien anzeigen, die mit "Math" markiert sind?

BEARBEITEN: Ich habe ein Tool namens erstellt tfind, das dies tut: https://github.com/tlehman/bin/blob/master/tfind

tlehman
quelle
2
Siehe github.com/jdberry/tag
mankoff
1
Ich stimme der Empfehlung tagvon James Berry bei zu https://github.com/jdberry. Sie können es über installieren brew install tag, ein Tag über hinzufügen, Tags über tag -a <tag> <file>suchen tag -f <tag1, tag2>. Sehr, sehr praktisch, ich benutze es die ganze Zeit.
Chris Conover
Ja, auf jeden Fall den tagBefehl bekommen. Lässt sich sehr einfach per Brew installieren.
Jacob

Antworten:

11

Ich gehe davon aus, dass sie ein xattr sein werden, wie sie derzeit auf 10.8.3 (und älter) sind.

Derzeit können Sie anzeigen, mit welchen erweiterten Attributen eine Datei ausgestattet ist ls -l@.

Aber um den Inhalt der Attribute zu sehen, müssen Sie verwenden xattr.

zurückhaltend
quelle
Sie hatten Recht, die Tags werden
tlehman
Zu Ihrer Information: Unter OS X El Capitan habe ich den Befehl xattr -pl com.apple.metadata:_kMDItemUserTags filename. Es war jedoch keine sehr freundliche Ausgabe.
LS
13

Ja, Sie können Dateien mit einem bestimmten Benutzer-Tag mithilfe von finden mdfind.

Erstellen Sie eine Datei und weisen Sie ihr im Finder ein benutzerdefiniertes Tag zu.

Dann gehen Sie in ein Terminal; Sie finden es mit:

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

oder

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

Siehe auch -onlyin aFolder, um die Suche einzuschränken.

Ich habe nicht überprüft, wie komplex diese booleschen Ausdrücke sein können, aber diese beiden Beispiele funktionieren.

Sie können die Ausgabe lsso umleiten:

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

Außerdem hat mdfind eine Option "-0"

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

das kann praktisch sein mit bösen Dateinamen.

Alecail
quelle
Das Problem bei dieser Methode ist, dass nicht alle Dateien gefunden werden und nur eine (möglicherweise leere) Teilmenge von Dateien zurückgegeben wird.
Markvgti
3
Es scheint , dass sie eine vereinfachte eingeführt haben mdfindSyntax für Tags, zum Beispiel: mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
WJV
1
@AntoineLecaille Ich habe 295 Dateien in einem Verzeichnis mit dem Tag "Orange" (dem Orange Label vor dem Upgrade auf Mavericks). Dieser Befehl listet nur 11 von ihnen auf. Haben Sie auch viele Dateien mit dem Tag "Grün" --- dieser Befehl findet keine von ihnen.
Markvgti
1
@wjv Ich habe die von Ihnen vorgeschlagene Syntax verwendet und habe genau die gleichen Ergebnisse erzielt, die ich oben aufgeführt habe.
Markvgti
1
@markvgti Dann nimm eine Orange-Datei, die mit diesem Befehl gefunden wird und eine, die nicht gefunden wird, und finde die Unterschiede mit xattr oder mdls?
Alecail
4

Sie können alle Tags einer Datei erhalten mit:

mdls -name kMDItemUserTags filename

Christian A. Strømmen
quelle
Dies scheint das Gegenteil von dem zu sein, was gefragt wurde. Ihr Befehl gibt alle Tags für eine Datei aus. Ich denke, das OP möchte alle Dateien mit einem Tag kennen.
bmike
2
Trotzdem nützlich. Es beantwortet die Frage, die ich hatte, als ich gegoogelt habe und hier gelandet bin. Wenn es keine andere Frage / Antwort gibt, die dies abdeckt, lohnt es sich möglicherweise, eine Frage selbst zu posten und zu beantworten.
Slipp D. Thompson