Tìm kiếm: thiếu đối số với `-exec 'khi sử dụng


12

Tôi chạy lệnh này:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\

tôi có đầu ra dưới đây:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

Lệnh chính xác để tìm bất kỳ tệp nào từ thư mục hiện tại và xóa bằng -exec?


1
Bạn có thể chỉ để rm "IMAG1806.jpg"? Nó nằm trong cùng một thư mục, vì vậy bạn biết nó được gọi là gì.
TheWanderer

@ Zacharee1 - sẽ cho rằng OP đang thực hiện "chạy khô". Tôi sẽ cân nhắc sử dụng a -i với rm chỉ trong trường hợp bạn tìm thấy "tìm thấy" nhiều tệp hơn sau đó dự định hoặc ít nhất là chạy mà không có -exec và xem xét danh sách tệp
Panther

1
@ Zacharee1: Lệnh find sẽ xóa tất cả các tệp được gọi với tên này trong thư mục hiện tại và tất cả các thư mục con của nó (ở bất kỳ độ sâu nào).
Dennis

3
Hoặc thay vì sử dụng -exec rmchỉ cần sử dụng -deletetrực tiếp.
Braiam

Câu trả lời:


30

Bạn đã bỏ lỡ một ;ở cuối (và một khoảng trống giữa {};). Lệnh đúng là:

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

;cho biết kết thúc của -execvị ngữ của find.

Cũng lưu ý rằng chúng ta đã sử dụng \;tức là \ở phía trước ;để thoát khỏi việc giải thích ;bằng shell, nếu không shell sẽ coi ;là kết thúc của toàn bộ findlệnh và findsẽ đưa ra cùng một lỗi. Bạn cũng có thể sử dụng ';'thay vì \;.

Bạn đang sử dụng \ở cuối, điều này cho thấy trình bao của bạn sẽ tiếp tục nhận đầu vào thông qua PS2(được chỉ định bởi >), bạn đã nhập IMAG1806.jpglại, do đó toàn bộ lệnh trở thành:

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

Như bạn có thể thấy đây không phải là một lệnh hợp lệ IMAG1806.jpgở cuối, không có biến -execvị ngữ và không có khoảng trắng giữa {}\;.


1
"Bạn đã bỏ lỡ phần ;cuối" Cảm ơn vì điều này, đã dành 10 phút khắc phục sự cố trước khi tôi nhận ra mình đã vô tình gõ :thay vì ;, trên các màn hình HD hiện đại này rất dễ bỏ lỡ ...
user5359531

7

Bạn có thể đơn giản

find . -type f -name 'IMAGE1806.jpg' -delete

Từ trang người đàn ông:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.
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.