Tại sao dấu chấm trong lệnh tìm?


14

Thông thường, người ta thấy findcác lệnh trông như thế này:

$ find . -name foo.txt

khi tìm kiếm là bắt đầu từ thư mục hiện tại. Tôi thấy rằng trên các máy của mình (Ubuntu, Cygwin) tôi nhận được kết quả tương tự mà không có dấu chấm.

Tại sao nó thường được bao gồm? Nó chỉ là một quy ước để được rõ ràng, hoặc là / nó được yêu cầu trên các hệ thống nhất định?

Câu trả lời:


27

Một số phiên bản * findyêu cầu bạn cung cấp một đối số đường dẫn là thư mục để bắt đầu tìm kiếm. Chấm. chỉ đơn giản là đại diện cho thư mục hiện tại thường là nơi bạn muốn tìm kiếm.

Bạn có thể thay thế điều này bằng bất kỳ đường dẫn nào bạn muốn làm cơ sở tìm kiếm. Trong một số phiên bản tìm thấy điều này có thể được để lại bởi vì thư mục hiện tại được ngụ ý nếu không có đối số đường dẫn.

Bạn có thể chạy man findtrong shell của bạn để biết chi tiết về các đối số. Ví dụ: tóm tắt sử dụng cho tôi chỉ ra rằng đối số đường dẫn là tùy chọn (bên trong hình vuông nước lợ []):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Nếu bạn chạy my findkhông có đối số ở tất cả các tệp và thư mục bắt đầu từ thư mục hiện tại sẽ được trả về. Ví dụ của bạn chỉ đơn giản nói rõ rằng tìm kiếm nên bắt đầu từ .và bao gồm biểu thức -name foo.txtlà một trong các bộ lọc tìm kiếm.

* Đáng chú ý là tất cả các biến thể BSD và bất cứ thứ gì tuân thủ nghiêm ngặt tiêu chuẩn POSIX . GNU find cho phép nó là tùy chọn.


1
Bạn có biết những phiên bản tìm kiếm yêu cầu điều này không? Hoặc nơi tôi có thể tìm kiếm để điều tra thêm? (tìm kiếm rất khó để google)
Eric Wilson

Điều thú vị về đường dẫn tìm kiếm mặc định.
rozcietrzewiacz

2
Tôi tin rằng hầu hết các biến thể tìm BSD yêu cầu một đối số đường dẫn trong khi trong GNU tìm thấy nó là tùy chọn. Biến thể có thể tồn tại.
Caleb

2
Lưu ý rằng trong ít nhất các thông số kỹ thuật tiêu chuẩn POSIX 2008, pathlà một đối số bắt buộc phải tìm .
Caleb

1
Lựa chọn về Nit: Bạn có thể thay thế [dấu chấm] này bằng bất kỳ đường dẫn nào bạn muốn có → → bất kỳ đường dẫn nào bạn muốn, vì bạn có thể nói find dir1 dir2 dir3 -name foo.txt.
G-Man nói 'Phục hồi Monica'

5

Ví dụ, phiên bản tìm kiếm AIX, yêu cầu đường dẫn và sẽ không chạy nếu không được cung cấp.

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

Mặc dù một số máy AIX có thể cài đặt GNU find, có thể xử lý mà không cần đường dẫn,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
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.