Cách tìm tệp trong FreeBSD


14

Tôi đang cố gắng xác định tất cả các bản sao example.filenametrên máy chủ FreeBSD của mình. Cách tốt nhất / dễ nhất / hiệu quả nhất để làm điều này là gì?


1
Mặc dù các câu trả lời sẽ tương tự nhau, nhưng bạn có thể muốn làm rõ xem bạn đang sử dụng Linux hay FreeBSD. Chúng không giống nhau.
Greg Hewgill

chỉnh sửa tiêu đề để làm cho hệ điều hành cụ thể hơn
Ian

Điều này có lẽ nên được gắn thẻ FreeBSD, nhưng tôi thiếu danh tiếng để làm điều đó.
mikl

Câu trả lời:


18
find / -name example.filename

2
Đáng tin cậy, nhưng chậm. Đôi khi rất chậm.
dmckee --- ex-moderator mèo con

3
các cờ 'tìm' khác có thể phù hợp, tùy thuộc vào nhu cầu: -type f (sẽ không bận tâm với các thư mục hoặc liên kết tượng trưng có cùng tên) -ls (để hiển thị chi tiết như kích thước của tệp, ví dụ: nếu các tệp có cùng tên nhưng nội dung khác nhau)
Zac Thompson

19
locate filename

Nhanh hơn nhiều so với find, nếu bạn đang chạy dịch vụ định vị và nó chỉ tìm thấy các tệp tồn tại vào updatedblần chạy cuối cùng (thông thường vào ban đêm dưới sự kiểm soát của công việc định kỳ).

Bạn có thể chạy updatedbbằng tay, nhưng điều đó thậm chí còn chậm hơn so với các findcletus gợi ý , và đòi hỏi root. Thỉnh thoảng tôi cập nhật cơ sở dữ liệu bằng tay sau khi cài đặt một loạt các công cụ mới.


3
Định vị chỉ hoạt động nếu bạn có dịch vụ đang chạy để xây dựng định vị db (quên tên gọi của nó). Nó cũng có thể bị trì hoãn thời gian (trong đó tệp bạn đang tìm kiếm có thể đã được thêm kể từ lần xây dựng cuối cùng).
cletus

Chỉnh sửa và bình luận chéo trên dây. Mát mẻ. Bạn, tất nhiên, đúng trên cả hai tính.
dmckee --- ex-moderator mèo con

4
Nếu bạn thấy mình làm find /hoặc trên bất kỳ cây lớn nào hơn một lần một tuần, thì việc chạy locatedịch vụ có lẽ là đáng giá, bởi vì locate(1)nó nhanh hơn rất nhiều.
Drew Stephens

@cletus Chạy sudo periodic weeklycập nhật locatecơ sở dữ liệu. Chạy nó sau khi cài đặt hoặc tải xuống có thể chứa các tệp bạn muốn.
Basil Bourque

2

Nếu bạn đã cài đặt định vị (còn gọi là slocate), thì

locate example.filename

xác định vị trí chạy một công việc định kỳ mỗi đêm mà giới thiệu lại tất cả các tệp trên máy của bạn. Không phải lúc nào cũng cập nhật vì lý do đó.


2

Đôi khi bạn muốn tìm tập tin ở cấp thư mục cụ thể. Trong trường hợp này có thể thuận tiện để sử dụng ký tự đại diện shell:

ls /data/*/example.filename

Rõ ràng điều này chỉ hoạt động nếu bạn có một cấu trúc thư mục cứng nhắc.


1

locate

Như những người khác đã đề cập, locatelà cách nhanh chóng để tìm một tập tin. Lệnh này sử dụng một chỉ mục được biên dịch trước của tên tệp và thư mục. Cơ sở dữ liệu tên này được tìm kiếm, thay vì thu thập thông tin qua hệ thống tệp của bạn.

locate example.filename 

Để không phân biệt chữ hoa chữ thường, thêm -i.

locate -i eXAmPle.FileName

Cập nhật locatecơ sở dữ liệu

Cơ sở dữ liệu được sử dụng locatephải được cập nhật. Sau khi thực hiện cài đặt hoặc tải xuống có thể chứa tệp bạn muốn, bạn phải cập nhật locatecơ sở dữ liệu.

locatesở dữ liệu cuối cùng sẽ được cập nhật tự động bởi hệ thống FreeBSD của bạn. Có một bộ công việc hàng tuần bao gồm nhiệm vụ này. Những việc vặt được liệt kê trong /etc/periodic/weekly/310.locatekịch bản.

Cách an toàn nhất dễ dàng nhất để buộc cập nhật sớm locatecơ sở dữ liệu là buộc các công việc hàng tuần phải được thực hiện ngay bây giờ.

sudo periodic weekly

Hoặc, bạn thậm chí có thể buộc tất cả các công việc thường xuyên phải được thực hiện. Bạn có thể muốn làm điều này ngay lập tức sau khi thiết lập một hệ thống FreeBSD mới.

sudo periodic daily weekly monthly

Nếu sử dụng các con đường khác để cập nhật locatecơ sở dữ liệu, bạn có thể nhận được thông báo về việc không an toàn, tiết lộ tên của tất cả các tệp của hệ thống của bạn cho bất kỳ người dùng nào trên hệ thống FreeBSD. Sử dụng periodictuyến đường tránh được vấn đề này.


0

Nếu bạn có cơ sở dữ liệu định vị cập nhật, thì chỉ cần:

locate example.filename

0

Tôi thỉnh thoảng làm


  find . | grep example.filename

có lẽ rất kém hiệu quả.


Yup, phù hợp với tất cả mọi thứ sau đó ném đi tất cả mọi thứ ngoại trừ một tên mà bạn đang tìm kiếm. Thay vào đó, bạn có thể chỉ cần thực hiện 'find -name "example.filename"', thực hiện chính xác cùng một công cụ mà không cần in mọi thứ trước và không chạy quy trình grep phụ.
Mihai Limbăşan
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.