Czy tagi OSX Mavericks są widoczne z wiersza poleceń?


13

Załóżmy na przykład, że mam strukturę katalogów taką jak

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

Czy w wierszu poleceń można użyć ls(lub czegoś w tym rodzaju) sposobu wyświetlenia wszystkich plików oznaczonych jako „Matematyka”?

EDYCJA: Stworzyłem narzędzie o nazwie tfindto: https://github.com/tlehman/bin/blob/master/tfind



1
Popieram zalecenie tagJamesa Berry'ego z https://github.com/jdberry. Możesz zainstalować go przez brew install tag, dodać tag przez tag -a <tag> <file>, znaleźć tagi przez tag -f <tag1, tag2>. Bardzo, bardzo przydatny, używam go cały czas.
Chris Conover,

Tak, zdecydowanie otrzymaj tagpolecenie. Bardzo łatwo instaluje się przez napar.
Jacob

Odpowiedzi:


11

Zakładam, że będą xattrami, tak jak obecnie są w wersji 10.8.3 (i starszych)

Obecnie możesz zobaczyć, jakie rozszerzone atrybuty ma plik ls -l@.

Ale żeby zobaczyć zawartość atrybutów, musisz użyć xattr.


Miałeś rację, tagi są przechowywane jako xattr
tlehman

FYI: Z OS X El Capitan, użyłem komendy xattr -pl com.apple.metadata:_kMDItemUserTags filename. Jednak nie był to bardzo przyjazny wynik.
LS

13

Tak, możesz znaleźć pliki, których używa dany znacznik użytkownika mdfind.

Utwórz plik i przypisz niestandardowy znacznik w Finderze.

Następnie wejdź do terminalu; znajdziesz to z:

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

lub

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

Zobacz także, -onlyin aFolderaby ograniczyć wyszukiwanie.

Nie sprawdziłem, jak złożone mogą być te wyrażenia logiczne, ale te dwa przykłady działają.

Możesz potokować dane wyjściowe w lsnastępujący sposób:

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

Ponadto mdfind ma opcję „-0”

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

co może być praktyczne w przypadku nieprzyjemnych nazw plików.


Problem z tą metodą polega na tym, że nie wyszukuje wszystkich plików, zwracając tylko (prawdopodobnie pusty) podzestaw plików.
markvgti

3
Wydaje się, że już wprowadzono uproszczoną mdfindskładnię znaczników, np mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
wjv

1
@AntoineLecaille Mam 295 plików w katalogu ze znacznikiem „Orange” (etykieta Orange przed uaktualnieniem do Mavericks). To polecenie zawiera tylko 11 z nich. Również wiele plików oznaczonych jako „zielone” --- to polecenie nie znajduje żadnego z nich.
markvgti

1
@wjv Użyłem sugerowanej przez ciebie składni i uzyskałem dokładnie takie same wyniki, jak wymienione powyżej.
markvgti

1
@markvgti Następnie weź jeden plik Orange znaleziony za pomocą tego polecenia i taki, którego nie ma, i znajdź różnice za pomocą xattr lub mdls?
Alecail

4

Możesz pobrać wszystkie tagi pliku za pomocą:

mdls -name kMDItemUserTags filename


To wydaje się być odwrotnością tego, o co pytano. Twoje polecenie zrzuca wszystkie tagi dla jednego pliku. Myślę, że OP chce znać wszystkie pliki z jednym znacznikiem.
bmike

2
Nadal przydatne. Odpowiada na pytanie, które miałem, kiedy znalazłem się w Google. Jeśli nie ma innego pytania, które to obejmuje, warto spróbować opublikować i odpowiedzieć samemu.
Slipp D. Thompson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.