“Find: missing argumen ke` -exec '”saat menggunakan“ -exec rm -f {} \ ”

12

Saya menjalankan perintah ini:

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

saya mendapat output di bawah ini:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

apa perintah yang tepat untuk menemukan file dari direktori saat ini dan menghapusnya -exec?

Akshay Patel
sumber
1
Tidak bisakah kamu hanya melakukannya rm "IMAG1806.jpg"? Itu di direktori yang sama, jadi Anda tahu apa namanya.
TheWanderer
@ Zacharee1 - akan menganggap OP melakukan "dry run". Saya akan mempertimbangkan menggunakan -i dengan rm kalau-kalau Anda menemukan "menemukan" lebih banyak file kemudian dimaksudkan atau setidaknya berjalan tanpa -exec dan meninjau daftar file
Panther
1
@ Zacharee1: Perintah find akan menghapus semua file yang dipanggil dengan nama ini di direktori saat ini dan semua subdirektori (pada kedalaman apa pun).
Dennis
3
Atau alih-alih menggunakan -exec rmcukup gunakan -deletelangsung.
Braiam

Jawaban:

30

Anda melewatkan a ;di bagian akhir (dan spasi di antara {}dan ;). Perintah yang benar adalah:

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

;menunjukkan akhir dari -execpredikat find.

Juga perhatikan bahwa kita telah menggunakan \;yaitu \di depan ;untuk menghindari interpretasi ;oleh shell, jika tidak shell akan memperlakukan ;sebagai akhir dari seluruh findperintah dan findakan membuang kesalahan yang sama. Anda juga dapat menggunakan ';'bukan \;.

Anda menggunakan \pada akhirnya, ini menunjukkan shell Anda akan terus mengambil input melalui PS2(ditunjukkan oleh >), Anda mengetik IMAG1806.jpglagi, sehingga seluruh perintah menjadi:

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

Seperti yang Anda lihat ini sama sekali bukan perintah yang valid dengan IMAG1806.jpgdi akhir, tidak ada penutupan -execpredikat dan tanpa spasi antara {}dan \;.

heemayl
sumber
1
"Kau melewatkan satu ;di akhir" Terima kasih untuk ini, menghabiskan 10 menit pemecahan masalah sebelum aku menyadari aku sengaja telah diketik :bukan ;, pada ini layar HD modern mudah untuk kehilangan ...
user5359531
7

Anda bisa saja

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

Dari halaman manual:

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.
Burhan Khalid
sumber