Mdfind có cho phép tìm kiếm ký tự đại diện trên tên tệp không?


6

Tôi đang cố gắng tìm ra cách thực hiện tìm kiếm ký tự đại diện cho tên tệp bằng mdfind trên OsX? Tôi đã thử: mdfind -name "*.pdf"nhưng nó không hoạt động.

EDIT: Tôi muốn có thể tìm thấy các tên như "test * .pdf"


mdfindlà một nỗi đau để sử dụng! Thay vào đó, locateđược cài đặt sẵn, vì vậy nếu bạn đồng bộ hóa chỉ mục (với sudo /usr/libexec/locate.updatedb), bạn có thể sử dụng nó thay thế và tránh học mdfindcú pháp. Tất nhiên, nhược điểm rất lớn là bạn sẽ cần phải đồng bộ hóa thủ công. Xem thêm developer.apple.com/l Library / mac / document / Magnwin / Reference / Từ NB: Chỉ cần làm rõ: locatekhông sử dụng Spotlight, nhưng đối với người dùng Linux có lẽ sẽ quen thuộc hơn.
ccpizza

Dưới đây là một định vị giả sử dụng mdfind bạn có thể thêm vào khởi tạo bash của mình. function mdname () { if [ $1 = "-i" ]; then shift mdfind "kMDItemDisplayName == '$@'c" else mdfind "kMDItemDisplayName == $@" fi } - điều tốt nhất của cả hai thế giới mặc dù bị rối loạn do không thể thêm mã được định dạng vào các bình luận, do đó bạn cần thêm các dòng mới hoặc như trong bản gốc nơi có những khoảng trống lớn đó.
jwd630

@ccpizza Đáng buồn là các locatetàu có macOS chạy dưới dạng nobodyvà không thể tìm kiếm các thư mục mà người dùng không có quyền. Rõ ràng, bạn có thể sử dụng homebrew để cài đặt GNU Locate. Xem: stackoverflow.com/questions/15887431/ Mạnh
không-chỉ-yeti

bạn có thể sử dụng 'ls * .pdf' từ một số thư mục đủ không? các tùy chọn trên ls trước tên tệp sẽ xác định đầu ra của bạn.
jmh

Câu trả lời:


14

Điều này sẽ làm việc:

mdfind "kMDItemDisplayName == test*.pdf"

Gửi mẫu trong dấu ngoặc đơn và thêm 'c' để khớp với trường hợp không nhạy cảm:

mdfind "kMDItemDisplayName == 'test*.pdf'c"

Dưới đây là danh sách các thuộc tính có sẵn. Bạn có thể kết hợp nhiều cặp thuộc tính / giá trị với &&.


Tôi chỉ có thể mdfindđi làm khi ký tự đại diện ở đầu hoặc cuối tên. Vì vậy, thay vì test*.pdf, tôi đã loại bỏ nó mdfind "kMDItemDisplayName == 'test*' | grep pdf. (Thậm chí tốt hơn, đường ống đến grep \\.pdf$.) Thở dài.
không chỉ là

Rất tiếc, một trích dẫn kép bị thiếu trong nhận xét trước của tôi; cho khả năng sao chép : mdfind "kMDItemDisplayName == 'test*'" | grep pdf.
không chỉ là

FWIW * bên trong tên hoạt động tốt với tôi
dgrogan

2

Khi tìm kiếm rõ ràng tên tệp , kinh nghiệm của tôi là kMDItemFSNamethuộc tính cung cấp kết quả ngắn gọn hơn. Một đề xuất khác: thêm công cụ dsửa đổi so sánh (không nhạy cảm với dấu phụ) để ví dụ: khớp với tệp có tên "Entrée Menu.pdf" khi tìm kiếm "entree" :

mdfind 'kMDItemFSName == "*entree*"cd'

Ngoài ra, do liên kết của @ tcmb với tham chiếu thuộc tính đã chết, đây là hai liên kết hoạt động: Thuộc tính siêu dữ liệu SpotlightThuộc tính siêu dữ liệu iCloud .


2

tàu macOS với findlệnh thông thường , và mdfindkhông phải là sự thay thế cho find.

Nếu bạn thực sự chỉ muốn tìm kiếm thư mục hiện tại cho tất cả các tệp pdf, có lẽ bạn chỉ nên làm find . -name '*.pdf'

Theo mặc định, mdfindtìm kiếm theo nội dung tệp và siêu dữ liệu và nó tìm kiếm toàn bộ ổ cứng của bạn thay vì chỉ một thư mục - trên hệ thống của tôi mdfind pdftìm thấy hàng chục ngàn kết quả.

Nếu bạn phải sử dụng mdfind, vì nó nhanh hơn, bạn có một vài tùy chọn để giới hạn kết quả, ví dụ:

mdfind pdf -onlyin .
mdfind 'kMDItemFSName = *.pdf' -onlyin .
mdfind 'kMDItemContentTypeTree = *.pdf' -onlyin .

Sử dụng mdlsđể tìm hiểu siêu dữ liệu nào có sẵn cho một tệp và cú pháp khớp mẫu rất tối giản vì nó cần khớp với chỉ mục cơ sở dữ liệu của hệ thống tệp của bạn.

Ngoài ra, bạn có thể mdfindvới grep, đưa ra tốc độ mdfindvà kết hợp regex đầy đủ trên đường dẫn tệp. Ví dụ:

mdfind pdf -onlyin . | grep 'pdf$'

Một cảnh báo cuối cùng là mdfindkhông tìm kiếm hệ thống tệp thực tế của bạn, nó chỉ tìm kiếm cơ sở dữ liệu nổi bật có thể thiếu các phần của hệ thống tệp hoặc không chính xác. Sử dụng findnếu bạn yêu cầu kết quả đáng tin cậy. Sử dụng mdfindkhi bạn yêu cầu tốc độ trên độ chính xác và khi bạn cần các cụm từ tìm kiếm phức tạp (ví dụ: tìm tất cả các tệp pdf được tạo trong phạm vi ngày cụ thể và chứa cụm từ văn bản).

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.