Việt grep -r foo * Cảnh vs vs grep -r foo.


10

Khi sử dụng grep -r, bạn có thể tìm kiếm trong tất cả các tệp bằng * hoặc. và nó dường như trả lại điều tương tự nhưng nó có thực sự giống nhau không?

Hãy nói rằng tôi tìm kiếm "foo", sau đó tôi có thể viết

grep -r foo *

hoặc là

grep -r foo .

Bất cứ ai sẽ cố gắng để giải thích sự khác biệt giữa. và *?

Câu trả lời:


15

grep -r foo *không tìm kiếm kết quả khớp trong các tệp hoặc thư mục ẩn, cũng *được mở rộng bởi trình bao để bạn có thể gặp phải một danh sách Đối số lỗi quá dài khi có nhiều mục trong thư mục hiện tại hoặc một số lỗi hoặc hành vi sai khác nếu Tên của một số tệp hoặc thư mục bắt đầu bằng ký tự gạch ngang.

Yêu cầu grep -r foo .không có sai sót ở trên

Cập nhật:

Một điểm khác biệt: trang người đàn ông của grep (@ fedora17) nói:

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

Cũng sẽ có một sự khác biệt khi bạn thực hiện lệnh này trong một thư mục trống:

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$

4

Nếu bạn sử dụng dấu hoa thị, bạn không thể khớp các tệp trong các thư mục có tên bắt đầu bằng dấu chấm, như .cache.

Cập nhật:

Điều này là do *shell được mở rộng trước khi gọi grep, vì vậy nó nhận được một danh sách các tên thay vì một tên thư mục duy nhất (cho hiện tại .). Vỏ cách mở rộng các mô hình có thể được tùy chỉnh với thông số vỏ (như đối với nullglob, nocaseglobhoặc khác bashtùy chọn) hoặc có các biến môi trường (như LANGhay LC_ALL)

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.