Làm cách nào để tìm tệp theo tên tệp trong thiết bị đầu cuối Mac OSX?


118

Tôi muốn tìm một tệp trên Macbook của mình với tên tệp : abc.dmg. Tôi đã thử sử dụng đèn chiếu, nhưng nó không tìm thấy. Khi tôi cố gắng tìm và sử dụng : find -name abc.dmg -path /, tôi đã gặp lỗi.

Cú pháp thích hợp để tìm tệp theo tên tệp bằng lệnh find trên thiết bị đầu cuối Mac OSX là gì?


1
@VxJasonxV Các câu hỏi của Apple là 100% về chủ đề cho Siêu người dùng và không có nhu cầu thực sự để mọi câu hỏi của Apple được chuyển đến đó. Tuy nhiên, câu hỏi về iPhone hoặc iPad sẽ được chuyển khi / nếu cần.
BinaryMisfit

Đó không phải là một lý do quá lạc đề, nhưng thực tế là có một chủ đề / trang web cụ thể hơn cho chủ đề chung này.
VxJasonxV

@Diago: Đã có cuộc thảo luận nào về vấn đề này trên meta hoặc trò chuyện chưa? Chỉ cần tự hỏi bởi vì AFAIK apple.SE sẽ sớm ra mắt bản beta, vì vậy thật tuyệt khi có được tất cả mọi người trên cùng một trang.
Robert S Ciaccio

1
@calavera. Thảo luận khá cũ nhưng có liên quan có thể được tìm thấy ở đây . Apple SE, Ubuntu SE và Linux SE đều có mặt để khen ngợi Super User, nhưng chúng tôi không muốn buộc người dùng phải di chuyển. Tôi thích đặt câu hỏi Apple của tôi ở đây hơn là Apple, vì tôi sử dụng 3 hệ điều hành khác nhau. Nếu tôi có một câu hỏi rất cụ thể, tôi sẽ hỏi nó trên một trang web chuyên biệt hơn.
BinaryMisfit

Câu trả lời:


163

Ở dạng đơn giản nhất, findlấy một tham số: đường dẫn. Ở dạng thực sự hữu ích của nó, nó đi theo con đường theo tiêu chí thu hẹp.

Vì vậy, bạn muốn:

  • find (chương trình)
  • / (đường dẫn) và
  • -name abc.dmg (các tiêu chí).
find / -name abc.dmg

12
Bạn có thể nhận được quyền từ chối lỗi loại khi tìm kiếm toàn bộ ổ đĩa nhưng chúng có thể bị bỏ qua trừ khi bạn cho rằng tệp nằm trong một thư mục bị hạn chế. Nếu vậy hãy sử dụng sudo find / -name abc.dmg
Chris Nava

Đã thử nó, nhưng không có kết quả.
SPRBRN

6
Có lẽ sau đó, bạn không có tệp có tên abc.dmg trên máy tính của mình. Bạn có thể sử dụng -iname thay vì -name để làm cho trường hợp tìm kiếm không nhạy cảm. Tôi rất nghi ngờ bạn thực sự đang tìm kiếm "abc.dmg", và cho rằng thực tế (có lẽ), thật khó để nói cho bạn biết vấn đề của bạn là gì mà không có chi tiết thực sự.
VxJasonxV

2
@rxt: nếu tìm thấy không tìm thấy nó, thì nó không có ở đó ...
Robert S Ciaccio

5
Cho rằng báo cáo OP đã cố gắng tìm trong văn bản câu hỏi, điều đáng chú ý là thứ tự của các đối số có find vấn đề . Nếu phải find [path]+ [selection, grouping, and actions].
dmckee

23

find . -name '*.csv'ví dụ làm việc cho tôi với các ký tự đại diện. OP cũng có thể sử dụng find . -name '*.dmg'để kiểm tra thư mục hiện tại của mình, giả sử anh ta đang ở trong đó /.



6

Bạn có thể sử dụng locatelệnh.

locate abc.dmg

2
Lưu ý osxthẻ. Slocate db không cư trú theo mặc định.
VxJasonxV

Đã thử nó, sau khi tạo cơ sở dữ liệu, nhưng không có kết quả.
SPRBRN

nếu locatemdfindcả hai đều thất bại, rất có thể tệp không có trên máy của bạn. Hoặc nó không được đặt tên như thế nào bạn nghĩ nó được đặt tên. có lẽ tìm kiếm TẤT CẢ DMG có thể là bước tiếp theo của bạn?
Peelman

3

Cách đơn giản nhất (mà tôi chắc chắn là bạn đã thử, nhưng này, hãy để tôi thêm nó vào chuỗi nào) là nhập abc.dmg vào hộp tìm kiếm ở trên cùng bên phải của bất kỳ cửa sổ tìm kiếm nào, sau đó chọn "Tệp Tên "từ các tùy chọn trên Thanh Tìm kiếm xuất hiện.

Không cần thiết bị đầu cuối.

Cũng nên nhớ rằng Spotlight chỉ lập chỉ mục các thư mục được chỉ định trong bảng điều khiển Spotlight và abc.dmg có thể không nằm trong một trong các thư mục đó.

Sửa lỗi cho tôi nếu tôi sai, nhưng tôi nghĩ lệnh find cần biết đầu ra là gì:

find / -name abc.dmg -print

... nên in bất kỳ kết quả nào đến thiết bị đầu cuối (bao gồm cả lỗi cho phép).

Nếu bạn không muốn lỗi quyền và muốn tìm kiếm các thư mục Người dùng khác thì:

sudo find / -name abc.dmg -print

2

Bạn có thể sử dụng các chức năng dòng lệnh sau để nhanh chóng tìm và mở tệp có liên quan. Tôi thấy điều này dễ hơn là gõ chuỗi truy vấn dài trong cửa sổ spotlight.

Thêm các chức năng sau vào ~/.bash_aliases.

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Bây giờ, source ~/.bash_aliaseshoặc mở một chức năng tải thiết bị đầu cuối mới. Để tìm kiếm các tệp có từ, bánh và 2016 ở bất cứ đâu trong tên tệp, hãy làm

spot pie*2016 #or
spot 2016*pie

Không cần phải thêm hoặc thêm *vào truy vấn của bạn dưới dạng mẫu tìm kiếm, '*$1*'đã gắn thẻ mục nhập thẻ hoang dã ở đầu và cuối truy vấn của bạn. Bổ sung cdlà cho trường hợp không nhạy cảm và bỏ qua dấu phụ, ví dụ, fredsẽ trả lại cả hai, Frédéric và FrEDeric.

findpapersẽ hạn chế tìm kiếm kết quả theo một đường dẫn cụ thể (đệ quy) trong khi openpaper pie*201sẽ mở kết quả tìm kiếm (hoặc đầu tiên trong nhiều kết quả) hoặc openpaper pie*201 3sẽ mở mục kết quả thứ ba. Để tránh mở tập lệnh bash hoặc các tệp không phải tài liệu khác, bạn có thể hạn chế nội dung tệp bằng các thuộc tính tìm kiếm bổ sung. Xem Cú pháp biểu thức truy vấn siêu dữ liệu tệphttps://ss64.com/osx/mdfind.html để sử dụng các toán tử tìm kiếm khác.


Tuyệt vời! Stilling nó: D
Atcold

0

Ghi lại danh sách mọi tệp trên đĩa của bạn dưới dạng root từ /

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

Cat toàn bộ tập tin thông qua grep để tìm kiếm toàn bộ ổ đĩa:

cat ~/file-list.txt | grep abc.dmg

Sử dụng các biểu thức thông thường để chỉ hiển thị các tệp .jpg và .dmg:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Kết quả:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

...Vân vân. Thật không may, cũng sẽ nắm bắt tất cả các đĩa được gắn kết sao cho tốt nhất để đẩy những cái Time Machine mà chúng có rất nhiều liên kết. Vì vậy, trong một cửa sổ khác, tôi chạy watch tail -n 10 ~/file-list.txtnó cho tôi thấy nơi mà nó sẽ xảy ra trong vụ hack khủng khiếp của tôi!


1
Thực tiễn xấu hoặc những điều đáng được nhận xét: (1) sudo find / > ~/file-list.txtcó vẻ tốt hơn so với việc chạy toàn bộ hệ thống gốc. (2) find *sẽ bỏ qua các đối tượng ẩn (dấu chấm) (nếu có) trong /. (3) &>là một bashism. (4) Sử dụng vô dụng cat. (5) grep abc.dmgsẽ in ví dụ /foo/bar/123abcXdmg456/baz/whatever. // Một điều tốt mà câu trả lời của bạn mang đến cho chủ đề này (và câu trả lời khác là không) là cách tiếp cận mà người dùng chạy findmột lần và sau đó sử dụng lại kết quả đã lưu nhiều lần mà không cần truy vấn (các) hệ thống tập tin nhiều lần. Lợi thế tiềm năng này không được nhấn mạnh mặc dù.
Kamil Maciorowski

điểm tốt cảm ơn Kamil, đã làm điều đó và cũng đã chown $ (whoami)
Tomachi
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.