Có cách nào để nói ack
chỉ tìm kiếm văn bản trên thư mục hiện tại không? (hoặc chỉ định một max-depth
cấp độ?) Và với grep
?
Có cách nào để nói ack
chỉ tìm kiếm văn bản trên thư mục hiện tại không? (hoặc chỉ định một max-depth
cấp độ?) Và với grep
?
Câu trả lời:
Sử dụng -n
cho no-recurse
:
$ ack -n foo
grep
không được đệ quy theo mặc định và bạn chỉ nên sử dụng -r
cờ nếu bạn muốn tìm kiếm đệ quy.
Bạn có thể tìm kiếm thư mục hiện tại grep
như sau:
$ grep -- foo *
Bạn có thể tìm thấy cặp đôi với đối số -exec. thí dụ:
find . -maxdepth 1 -exec grep foo {} \;
Điều này có thể được thu nhỏ, tức là -maxdepth 2
-maxdepth 1
) đã được mở rộng. Ví dụ -maxdepth 2
. Tôi không biết làm thế nào để mô tả chỉnh sửa bạn đã thực hiện như vậy.
-maxdepth
) không phải là cú pháp di động / tiêu chuẩn (chỉ GNU và một số BSD). Ngoài ra, không có điểm nào sử dụng \;
ở đây (chạy một grep
cho mỗi tệp). Sử dụng grep -H foo {} +
(GNU cụ thể) hoặc grep foo /dev/null {} +
(tiêu chuẩn) để đảm bảo tên tệp luôn được in. Tiêu chuẩn tương đương -maxdepth 2
sẽ làfind . -path './*/*' -type d -prune -o -type f -exec ...
.
khi bạn không cung cấp -mindepth 1
) trong khi GNU grep
sẽ không cố đọc các thư mục với -r
(nó đệ quy trên chúng). Bạn có thể muốn thêm một -d skip
đến grep
(giả sử GNU grep) hoặc tốt hơn thêm ! -type d
để find
hoặc thậm chí tốt hơn -type f
(hoặc -xtype f
giả GNU find
) như bạn có lẽ không muốn grep
để đọc các tập tin không thường xuyên.
grep -Hin
với phương pháp này để tôi có thể thấy tên tệp và dòng xảy ra.
-n
không tái diễn chút nào.