Làm thế nào để tìm một thư mục trên linux?


453

Tôi có một VPS với Suse Linux 10.3 .

Tôi đã đăng nhập qua SSH / putty và đang cố gắng tìm vị trí các tệp web của mình.

Vì tôi đang tải lên qua FTP trong một thư mục có tên httpdocs , tôi giả sử rằng thư mục này tồn tại ở đâu đó.

Các tìm kiếm google của tôi đã dạy tôi làm điều này, vào thư mục gốc của tôi và gõ:

find httpdocs -type d

nhưng nó nói " Không có tập tin hoặc thư mục như vậy ".

Làm thế nào tôi có thể tìm thấy thư mục này?


4
Trong trường hợp ai đó thắc mắc, lệnh trong câu hỏi sẽ tìm thấy tất cả các thư mục ( -type d) trong mục nhập thư mục httpdocs(liên quan đến thư mục làm việc hiện tại, thường nhưng không nhất thiết phải là một thư mục). Nó không thành công với thông báo lỗi vì không có mục nhập thư mục httpdocstrong thư mục gốc của hệ thống và do đó không có điểm bắt đầu cho tìm kiếm.
Daniel Beck

Câu trả lời:


609

Nó là:

find / -type d -name 'httpdocs'

tham số đầu tiên "/" là nơi cần tìm, trong trường hợp này "/" đó là toàn bộ hệ thống.

-name có thể là -iname để bỏ qua trường hợp

cũng không phải là bắt buộc

sử dụng: người đàn ông tìm cho nhiều lựa chọn hơn


2
find / -name 'httpdocs' hoạt động rất cảm ơn
Edward Tanguay

91
Nó có thể không quan trọng đối với các tìm kiếm đơn giản, nhưng đối với các lệnh tìm phức tạp hơn, cần lưu ý rằng mọi thứ được đánh giá theo thứ tự chúng nằm trên dòng lệnh. Vì vậy, bạn có thể muốn có -type d (chỉ thư mục) trước -name, để tăng tốc mọi thứ. Một lần nữa, điều này có thể không quan trọng lắm ở đây, nhưng khi vào các tìm kiếm phức tạp hơn, nó có thể cải thiện đáng kể tốc độ tìm kiếm.
Đaminh Eidson

14
Trên thực tế, -namebài kiểm tra nhanh hơn hầu hết các bài kiểm tra khác vì -nameđược đối chiếu với danh sách của thư mục đã được tải từ đĩa và các bài kiểm tra khác cần thực hiện stat(2)để lấy thông tin tệp. Sau stat()cuộc gọi đầu tiên cho một tệp, các thử nghiệm tiếp theo nhận được từ bộ nhớ, ví dụ : -type f -mtime -10.
Arcege

24
Nếu bạn định thực hiện tìm kiếm trên toàn bộ hệ thống tệp, đặc biệt là máy chủ, thì thường nên sử dụng niceđể tìm kiếm không mất quá nhiều tài nguyên từ các quy trình quan trọng hơn:nice find / ...
Arcege 30/12/11

16
Tôi sẽ nối thêm 2> / dev / null để tránh làm cho kết quả tìm kiếm của tôi bị ẩn trong tất cả các lỗi cấp phép.
Jason Yeo

63

lệnh này sẽ giúp bạn có được những gì bạn đang tìm kiếm:

find / -type d -name httpdocs

sẽ tìm kiếm từ thư mục gốc của máy chủ của bạn để tìm các thư mục có tên httpdocs hoặc nếu bạn chỉ muốn tìm kiếm từ thư mục hiện tại thay thế '/' bằng '.'

Một lệnh khác bạn có thể thử là xác định vị trí bạn sẽ làm một cái gì đó như:

locate httpdocs

xác định vị trí httpdocs cho tôi biết "xác định vị trí: lệnh không tìm thấy"
Edward Tanguay

4
Đối với những người sử dụng lệnh "định vị" (cho rằng nó tồn tại trong hệ thống của bạn), hãy đảm bảo rằng cơ sở dữ liệu mà nó tìm kiếm được cập nhật; thông thường một số công việc cron chăm sóc nó. Nếu không, hãy chạy "updateb" (là root). Sau đó chạy "xác định vị trí <somefile>" cần thiết của bạn. Điều này là cần thiết để tìm các tập tin / thư mục được thêm gần đây.
David Ramirez

+1 để xác định vị trí. Nó nhanh hơn rất nhiều nhưng chỉ khi chỉ số của nó được cập nhật. May mắn thay, một cái gì đó như "httpdocs" sẽ không thay đổi vị trí thường xuyên. Nếu bạn đang lên kế hoạch tìm kiếm tập tin liên tục trên máy, thì sẽ mất vài phút để thiết lập công việc định kỳ cập nhật.
Doug Harris

1
Ngoài ra, trong nhiều trường hợp, định vị sẽ trả về quá nhiều kết quả vì tất cả các tệp 100k trong thư mục đó sẽ hiển thị. Trong trường hợp cụ thể này, nếu mọi người dùng có httpdocs của riêng họ với 100 hoặc 1000 tệp, kết quả mà OP muốn có thể sẽ bị mất.
Jistanidiot

+1 để xác định vị trí ... Tôi luôn cập nhật cơ sở dữ liệu của mình để lệnh này rất hữu ích ... Ý tưởng tuyệt vời.
nicorellius

27
find / -type d -name httpdocs 2> /dev/null

Điều này sẽ loại bỏ tất cả các thông báo lỗi mà bạn có thể (đọc, luôn luôn) nhận được khi không thực hiện điều này với tư cách là người dùng root. Muốn làm theo cách này.


2
Các 2> /dev/nulltùy chọn là rất hữu ích. Nếu không, thật khó để nhìn thấy kết quả mong muốn ...
Gottlieb Notschnabel


13

Điều quan trọng là phải biết tham số -iname để tìm kiếm các mẫu "không phân biệt chữ hoa chữ thường" và sử dụng ký tự đại diện: *,?, V.v.

Hai ví dụ:

Tìm kiếm tất cả các tệp từ / root có chứa chuỗi "Linux", không phân biệt chữ hoa chữ thường:

find  /root -type f -iname "*linux*"

Tìm kiếm tất cả các thư mục từ / root có chứa chuỗi "Linux", không phân biệt chữ hoa chữ thường:

find  /root -type d -iname "*linux*"

Trích từ đây:

http://www.sysadmit.com/2015/12/linux-buscar-f Richos-directorios-con-find.html


Câu hỏi này là về cách tìm một thư mục có tên bạn biết chứ không phải làm thế nào để tìm một thư mục có tên bạn biết (khoảng). Bên cạnh đó, câu trả lời được chấp nhận (từ hơn 6 năm trước!) Đã đề cập đến -inamenhư một cách thay thế không phân biệt chữ hoa chữ thường -name.
G-Man

9

bạn gần như có nó cú pháp đúng sẽ là:

find / -type d -name httpdocs

Thư mục có khả năng dưới /var/www/


điều đó cho tôi biết "các con đường phải đi trước biểu hiện"
Edward Tanguay
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.