Các thẻ OSX Mavericks có thể nhìn thấy từ dòng lệnh không?


13

Ví dụ: giả sử tôi có cấu trúc thư mục như

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

Từ dòng lệnh, có cách nào tôi có thể sử dụng ls(hoặc một cái gì đó tương tự) để hiển thị tất cả các tệp được gắn thẻ là "Toán học" không?

EDIT: Tôi đã tạo ra một công cụ có tên tfindnày: https://github.com/ussyhman/bin/blob/master/tfind



1
Tôi thứ hai đề nghị cho tagJames Berry tại https://github.com/jdberry. Bạn có thể cài đặt nó qua brew install tag, thêm thẻ qua tag -a <tag> <file>, tìm thẻ qua tag -f <tag1, tag2>. Rất, rất tiện dụng, tôi sử dụng nó mọi lúc.
Chris Conover

Vâng, chắc chắn nhận được taglệnh. Cài đặt qua brew rất dễ dàng.
Jacob

Câu trả lời:


11

Tôi cho rằng họ sẽ là một xattr giống như họ hiện đang ở trên 10.8.3 (và cũ hơn)

Hiện tại, bạn có thể xem các thuộc tính mở rộng mà tệp có ls -l@.

Nhưng để xem nội dung của các thuộc tính, bạn phải sử dụng xattr.


Bạn đã đúng, các thẻ được lưu trữ dưới dạng xattr
tlehman

FYI: Với OS X El Capitan, tôi đã sử dụng lệnh , xattr -pl com.apple.metadata:_kMDItemUserTags filename. Tuy nhiên, nó không phải là đầu ra rất thân thiện.
LS

13

Có, bạn có thể tìm thấy các tệp có thẻ người dùng cụ thể bằng cách sử dụng mdfind.

Tạo một tệp và gán cho nó một thẻ tùy chỉnh trong Finder.

Sau đó đi trong một nhà ga; bạn sẽ tìm thấy nó với:

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

hoặc là

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

Xem thêm -onlyin aFolderđể hạn chế tìm kiếm.

Tôi đã không kiểm tra mức độ phức tạp của các biểu thức boolean này, nhưng hai ví dụ này hoạt động.

Bạn có thể dẫn đầu ra lsnhư thế này:

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

Ngoài ra, mdfind có tùy chọn "-0"

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

có thể thực tế với tên tập tin khó chịu.


Vấn đề với phương pháp này là nó không tìm thấy tất cả các tệp, chỉ trả về một tập hợp con (có thể trống) của các tệp.
markvgti

3
Có vẻ như họ đã giới thiệu một mdfindcú pháp đơn giản hóa cho các thẻ, ví dụ : mdfind "tag:Math",mdfind "tag:Math OR tag:Programming"
wjv

1
@AntoineLecaille Tôi có 295 tệp trong một thư mục có thẻ "Orange" (Nhãn màu cam trước khi nâng cấp lên Mavericks). Lệnh đó chỉ liệt kê 11 trong số đó. Cũng có nhiều tệp được gắn thẻ "Xanh" --- lệnh đó không tìm thấy tệp nào trong số chúng.
markvgti

1
@wjv Tôi đã sử dụng cú pháp do bạn đề xuất và nhận được kết quả chính xác như tôi đã liệt kê ở trên.
markvgti

1
@markvgti Sau đó lấy một tệp Orange được tìm thấy bằng lệnh này và một tệp không có, và tìm sự khác biệt với xattr hoặc mdls?
alecail

4

Bạn có thể nhận được tất cả các thẻ của một tệp với:

mdls -name kMDItemUserTags filename


Điều này dường như là nghịch đảo của những gì được hỏi. Lệnh của bạn bỏ tất cả các thẻ cho một tệp. Tôi nghĩ rằng OP muốn biết tất cả các tệp với một thẻ.
bmike

2
Tuy nhiên, hữu ích. Nó trả lời câu hỏi tôi có khi tôi Googled và kết thúc ở đây. Nếu không có Q / A khác nhau bao gồm điều này, có thể bạn nên tự mình đăng và trả lời.
Slipp D. Thompson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.