it-swarm-vi.com

Làm thế nào để chạy find -exec?

Tôi muốn tìm các tệp trong thư mục hiện tại có chứa văn bản "chrome".

$ find . -exec grep chrome
find: missing argument to `-exec'

Tôi đang làm gì sai?

538
ripper234

Bạn đã bỏ lỡ ; (Đã thoát ở đây dưới dạng \; Để ngăn Shell giải thích nó) hoặc +{}:

find . -exec grep chrome {} \;

hoặc là

find . -exec grep chrome {} +

find sẽ thực thi grep và sẽ thay thế {} bằng tên tệp được tìm thấy. Sự khác biệt giữa ;+ Là với ; Một lệnh grep cho mỗi tệp được thực thi trong khi với + Như nhiều tệp càng tốt càng tốt được đưa ra làm tham số cho grep cùng một lúc.

801
bmk

Bạn hoàn toàn không cần sử dụng find cho việc này; grep có thể xử lý việc mở các tệp từ danh sách toàn cầu của mọi thứ trong thư mục hiện tại:

grep chrome *

... hoặc thậm chí đệ quy cho thư mục và mọi thứ trong đó:

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

bạn cũng có thể làm:

find . | xargs grep 'chrome' -ls

Cái đầu tiên cho bạn thấy các dòng trong các tập tin, thứ hai chỉ liệt kê các tập tin.

Tùy chọn của Caleb gọn gàng hơn, ít tổ hợp phím hơn.

20
Mathew

Tìm là một cách và bạn có thể thử the_silver_searcher thì tất cả những gì bạn cần làm là

ag chrome

Nó sẽ tìm kiếm chrome trong tất cả các tệp (bao gồm các thư mục phụ) và nó nhanh hơn tìm thấy

7
Ask and Learn

Đây là một ví dụ về cách tôi thường sử dụng find/exec ...

find  . -name "*.py" -print -exec fgrep hello {} \;

Tìm kiếm này đệ quy cho tất cả các tệp .py và cho mỗi tệp in ra tên tệp và fgrep 'cho' xin chào 'trên tệp đó (cho mỗi tệp). Đầu ra trông giống như (chỉ cần chạy một ngày hôm nay):

./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
5
jon

Để xem danh sách các tập tin thay vì dòng:

grep -l "chrome" *

hoặc là:

grep -r -l "chrome" .
3
mateusz.szymborski