tìm -maxdepth 0 không trả lại cho tôi bất kỳ đầu ra nào


17

Tôi đang cố gắng để hiểu làm thế nào để sử dụng find -maxdepth 0tùy chọn.

Tôi có cấu trúc thư mục dưới đây.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Bây giờ, tôi thực hiện findlệnh của tôi như dưới đây.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Không có findlệnh nào ở trên , file1 được trả về.

Từ trang người đàn ông của find, tôi thấy thông tin dưới đây.

-maxdepth 0 có nghĩa là chỉ áp dụng các kiểm tra và hành động cho các đối số dòng lệnh.

Tôi đã tìm kiếm một số ví dụ với -maxdepth 0tùy chọn và không thể tìm thấy bất kỳ ví dụ thích hợp nào.

findPhiên bản của tôi là,

find --version
find (GNU findutils) 4.4.2

Ai đó có thể vui lòng cung cấp cho tôi một số gợi ý về trường hợp -maxdepth 0tùy chọn nào sẽ hữu ích không?

BIÊN TẬP

Khi tôi thực hiện lệnh dưới đây, tôi nhận được tệp1 được liệt kê hai lần. Đây có phải là dự định để làm việc theo cách này?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

Câu trả lời:


24

Chúng ta hãy giả sử rằng chúng ta có file1trong thư mục hiện tại. Sau đó:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Bây giờ, hãy xem những gì tài liệu nêu:

-maxdepth 0 có nghĩa là chỉ áp dụng các kiểm tra và hành động cho các đối số dòng lệnh.

Trong ví dụ đầu tiên của tôi ở trên, chỉ có thư mục .được liệt kê trên dòng lệnh. Vì .không có tên file1, không có gì được liệt kê trong đầu ra. Trong ví dụ thứ hai của tôi ở trên, cả hai .file1được liệt kê trên dòng lệnh và, vì file1khớp -name "file1", nó được trả về trong đầu ra

Nói cách khác, -maxdepth 0có nghĩa là không tìm kiếm thư mục hoặc thư mục con. Thay vào đó chỉ tìm một tệp phù hợp trong số những tệp được liệt kê rõ ràng trên dòng lệnh.

Trong ví dụ của bạn, chỉ có các thư mục được liệt kê trên dòng lệnh và không có thư mục nào được đặt tên file1. Do đó, không có đầu ra.

Nói chung, nhiều tệp và thư mục có thể được đặt tên trên dòng lệnh. Ví dụ, ở đây chúng tôi thử một findlệnh với 11 tệp và thư mục trên dòng lệnh:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Đường dẫn chồng chéo

Xem xét:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Rõ ràng, như Ramesh chỉ ra, findsẽ đi theo từng đường dẫn được chỉ định trên dòng lệnh và tìm kiếm . filesự trùng khớp ngay cả khi các đường dẫn dẫn đến cùng một tệp, như trong hoặc ngay cả khi các đường dẫn là trùng lặp chính xác, như trong file1 file1.


cảm ơn. Nhưng làm thế nào tôi có thể vượt qua một số tên tệp trên dòng lệnh?
Ramesh

Điểm tốt. Xem câu trả lời cập nhật của tôi. Bạn có thể đặt bao nhiêu tùy ý trước khi thử nghiệm đầu tiên. Ví dụ : find * -maxdepth 0 -name "file1". Các *sẽ liệt kê tất cả các tập tin trong thư mục hiện trên dòng lệnh.
John1024

1
@Ramesh Trả lời cập nhật lại với, tôi hy vọng, giải thích tốt hơn và ví dụ.
John1024

cảm ơn lần nữa Tôi đã cập nhật câu hỏi của tôi với nhiều chi tiết hơn từ bản cập nhật mới nhất của bạn.
Ramesh

@Ramesh Tôi không thể tìm thấy nó được ghi lại nhưng tôi thấy hành vi tương tự bạn làm: findnhìn vào từng đường dẫn trên dòng lệnh và báo cáo khớp với từng đường dẫn ngay cả khi chúng là trùng lặp.
John1024
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.