Чи помічені теги OSX Mavericks з командного рядка?


13

Наприклад, припустимо, у мене є структура каталогу, наприклад

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

Чи є в командному рядку спосіб, який я можу використовувати ls(або щось подібне), щоб відобразити всі файли з тегом "Math"?

EDIT: Я створив інструмент під назвою, tfindякий робить це: https://github.com/tlehman/bin/blob/master/tfind


2
Дивіться github.com/jdberry/tag
mankoff

1
Я другий за рекомендацією tagДжеймса Беррі в https://github.com/jdberry. Ви можете встановити його через brew install tag, додати тег через tag -a <tag> <file>, знайти теги через tag -f <tag1, tag2>. Дуже, дуже зручно, я користуюсь цим постійно.
Кріс Коновер

Так, обов'язково отримайте tagкоманду. Встановлюється заваркою дуже легко.
Яків

Відповіді:


11

Я припускаю, що вони будуть xattr, як зараз 10.8.3 (і старші)

Наразі ви можете переглянути, з якими розширеними атрибутами має файл ls -l@.

Але, щоб побачити вміст атрибутів, ви повинні використовувати xattr.


Ви мали рацію, теги зберігаються як xattr
tlehman

FYI: З OS X El Capitan, я використовував команду xattr -pl com.apple.metadata:_kMDItemUserTags filename. Однак це був не дуже дружній вихід.
LS

13

Так, ви можете знайти файли, які мають заданий тег користувача, використовуючи mdfind.

Створіть файл та призначте його спеціальним тегом у Finder.

Потім заходьте в термінал; ви знайдете його за допомогою:

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

або

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

Дивіться також, -onlyin aFolderщоб обмежити пошук.

Я не перевіряв, наскільки складними можуть бути булеві вирази, але ці два приклади працюють.

Ви можете передати висновок lsтаким чином:

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

Також у mdfind є опція "-0"

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

що може бути практичним з неприємними іменами.


Проблема цього методу полягає в тому, що він не знаходить усіх файлів, повертаючи лише (можливо, порожній) підмножину файлів.
markvgti

3
Виявляється , вони ввели спрощений mdfindсинтаксис для тегів, наприклад: mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
wjv

1
@AntoineLecaille У мене 295 файлів у каталозі з тегом "Orange" (помаранчева мітка перед оновленням до Mavericks). Ця команда перераховує лише 11 з них. Також є багато файлів із позначкою "Зелений" --- що команда не знаходить жодного з них.
markvgti

1
@wjv Я використав запропонований вами синтаксис і отримав абсолютно такі самі результати, як я вказав вище.
markvgti

1
@markvgti Тоді візьміть один помаранчевий файл, знайдений з цією командою, і той, який ні, і знайдіть відмінності з xattr або mdls?
alecail

4

Ви можете отримати всі теги файлу за допомогою:

mdls -name kMDItemUserTags filename


Це, здається, є зворотним до того, що просили. Ваша команда скидає всі теги для одного файлу. Я думаю, що ОП хоче знати всі файли з одним тегом.
bmike

2
Все-таки корисно. Це відповідає на питання, яке було у мене, коли я гуглив і опинився тут. Якщо немає іншого питання, що стосується цього, можливо, варто докласти зусиль, щоб опублікувати та відповісти на себе.
Сліпп Д. Томпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.