"Find: falta el argumento a '-exec'" cuando se usa "-exec rm -f {} \"

12

Ejecuto este comando:

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

Obtuve la salida a continuación:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

¿Cuál es el comando exacto para encontrar cualquier archivo del directorio actual y eliminar con -exec?

Akshay Patel
fuente
1
¿No puedes simplemente hacerlo rm "IMAG1806.jpg"? Está en el mismo directorio, así que ya sabes cómo se llama.
TheWanderer
@ Zacharee1: supondría que el OP está haciendo una "ejecución en seco". Consideraría usar un -i con rm en caso de que su búsqueda "encuentre" más archivos de los previstos o al menos se ejecute sin -exec y revise la lista de archivos
Panther
1
@ Zacharee1: El comando find eliminará todos los archivos llamados con este nombre en el directorio actual y todos sus subdirectorios (a cualquier profundidad).
Dennis
3
O en lugar de usar -exec rmsolo usar -deletedirectamente.
Braiam

Respuestas:

30

Te perdiste la ;a al final (y también un espacio entre {}y ;). El comando correcto es:

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

;indica el final del -execpredicado de find.

También tenga en cuenta que hemos utilizado, por \;ejemplo, \en frente de ;para escapar de la interpretación de ;by shell, de lo contrario, shell se tratará ;como el final de todo el findcomando y findarrojará el mismo error. También puede usar en ';'lugar de \;.

Estaba usando \al final, esto indica que su shell continuará recibiendo información a través de PS2(indicado por >), IMAG1806.jpgvolvió a escribir , por lo que todo el comando se convierte en:

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

Como puede ver, este no es un comando válido en absoluto con IMAG1806.jpgal final, sin cierre de -execpredicado y sin un espacio entre {}y \;.

heemayl
fuente
1
"Se perdió la una ;al final" Gracias por esto, pasaron 10 minutos la solución de problemas antes de que me di cuenta que había introducido accidentalmente :en lugar de ;, en estas pantallas HD modernos su fácil pasar por alto ...
user5359531
7

Puedes simplemente

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

Desde la página del 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
fuente