“Trova: argomento mancante per` -exec '”quando si usa“ -exec rm -f {} \ ”


12

Eseguo questo comando:

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

ho ottenuto l'output di seguito:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

qual è il comando esatto per trovare qualsiasi file dalla directory corrente e rimuoverlo con -exec?


1
Non puoi farlo rm "IMAG1806.jpg"? È nella stessa directory, quindi sai come si chiama.
TheWanderer,

@ Zacharee1 - presumerebbe che l'OP stia facendo una "corsa a secco". Vorrei prendere in considerazione l'utilizzo di un -i con rm nel caso in cui la tua ricerca "trovi" più file di quelli previsti o almeno in esecuzione senza -exec e rivedendo l'elenco dei file
Pantera

1
@ Zacharee1: il comando find eliminerà tutti i file chiamati con questo nome nella directory corrente e tutte le sue sottodirectory (a qualsiasi profondità).
Dennis,

3
O invece di usare -exec rmbasta usare -deletedirettamente.
Braiam,

Risposte:


30

Hai perso la ;a alla fine (e uno spazio troppo tra {}e ;). Il comando corretto è:

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

;indica la fine del -execpredicato di find.

Si noti inoltre che abbiamo usato, \;cioè \davanti, ;per sfuggire all'interpretazione di ;by shell, altrimenti shell tratterà ;come fine dell'intero findcomando e findgenererà lo stesso errore. Puoi anche usare al ';'posto di \;.

Stavi usando \alla fine, questo indica che la tua shell continuerà a ricevere input tramite PS2(indicato da >), hai digitato di IMAG1806.jpgnuovo, quindi l'intero comando diventa:

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

Come puoi vedere, questo non è affatto un comando valido con IMAG1806.jpgalla fine, nessuna chiusura del -execpredicato e senza uno spazio tra {}e \;.


1
"Hai perso la ;a alla fine" Grazie per questo, ho impiegato 10 minuti per la risoluzione dei problemi prima che mi :;
rendessi

7

Puoi semplicemente

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

Dalla pagina man:

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.