Sind die OSX Mavericks-Tags über die Befehlszeile sichtbar?

Angenommen, ich habe eine Verzeichnisstruktur wie z

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

Gibt es von der Befehlszeile aus eine Möglichkeit ls(oder etwas Ähnliches), alle Dateien anzuzeigen, die als "Math" gekennzeichnet sind?

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

Ich schließe mich der Empfehlung tagvon James Berry an https://github.com/jdberry. Sie können es über installieren brew install tag, ein Tag hinzufügen über tag -a <tag> <file>und Tags finden über tag -f <tag1, tag2>. Sehr, sehr praktisch, ich benutze es die ganze Zeit.
Ja, auf jeden Fall den tagBefehl bekommen. Lässt sich sehr einfach über Brew installieren.

Antworten (3)

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

Derzeit können Sie anzeigen, welche erweiterten Attribute eine Datei mit ls -l@.

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

Sie hatten Recht, die Tags werden als xattr gespeichert
FYI: Bei OS X El Capitan habe ich den Befehl xattr -pl com.apple.metadata:_kMDItemUserTags filename. Es war jedoch keine sehr freundliche Ausgabe.

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

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

Gehen Sie dann in ein Terminal; Sie finden es mit:

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

oder

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

Siehe auch -onlyin aFolderSuche einschrä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 lswie folgt weiterleiten:

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.

was bei fiesen Dateinamen praktisch sein kann.

Das Problem bei dieser Methode ist, dass sie nicht alle Dateien findet und nur eine (möglicherweise leere) Teilmenge von Dateien zurückgibt.
Anscheinend haben sie eine vereinfachte mdfindSyntax für Tags eingeführt, z. B.: mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
@markvgti Welche Dateien findet dieser Befehl nicht?
@AntoineLecaille Ich habe 295 Dateien in einem Verzeichnis mit dem Tag "Orange" (das Orange Label vor dem Upgrade auf Mavericks). Dieser Befehl listet nur 11 davon auf. Haben auch viele Dateien mit dem Tag "Green" --- dieser Befehl findet keine davon.
@wjv Ich habe die von Ihnen vorgeschlagene Syntax verwendet und genau die gleichen Ergebnisse wie oben aufgeführt erhalten.
@markvgti Nehmen Sie dann eine Orange-Datei, die mit diesem Befehl gefunden wird, und eine, die nicht gefunden wird, und finden Sie die Unterschiede mit xattr oder mdls ?

Sie können alle Tags einer Datei erhalten mit:

mdls -name kMDItemUserTags filename

Dies scheint das Gegenteil dessen 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.
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, selbst eine zu posten und zu beantworten.