«Find: argument manquant à« -exec »» lors de l'utilisation de «-exec rm -f {} \»

12

J'exécute cette commande:

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

j'ai obtenu la sortie ci-dessous:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

quelle est la commande exacte pour trouver n'importe quel fichier du répertoire courant et supprimer avec -exec?

Akshay Patel
la source
1
Tu ne peux pas juste rm "IMAG1806.jpg"? Il se trouve dans le même répertoire, vous savez donc comment il s'appelle.
TheWanderer
@ Zacharee1 - supposerait que l'OP effectue un "essai à sec". J'envisagerais d'utiliser un -i avec rm au cas où votre recherche "trouverait" plus de fichiers que prévu ou au moins s'exécuterait sans -exec et passer en revue la liste des fichiers
Panther
1
@ Zacharee1: La commande find supprimera tous les fichiers appelés avec ce nom dans le répertoire courant et tous ses sous-répertoires (à n'importe quelle profondeur).
Dennis
3
Ou au lieu d'utiliser -exec rmsimplement utiliser -deletedirectement.
Braiam

Réponses:

30

Vous avez raté le a ;à la fin (et un espace aussi entre {}et ;). La commande correcte est:

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

;indique la fin du -execprédicat de find.

Notez également que nous avons utilisé \;ie \devant ;pour échapper à l'interprétation de ;par shell, sinon shell sera traité ;comme la fin de la findcommande entière et findlancera la même erreur. Vous pouvez également utiliser à la ';'place de \;.

Vous utilisiez \à la fin, cela indique que votre shell continuera à prendre des entrées via PS2(indiqué par >), vous avez tapé à IMAG1806.jpgnouveau, donc toute la commande devient:

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

Comme vous pouvez le voir, ce n'est pas du tout une commande valide avec IMAG1806.jpgà la fin, pas de fermeture de -execprédicat et sans espace entre {}et \;.

heemayl
la source
1
"Vous avez raté le a ;à la fin" Merci pour cela, j'ai passé 10 minutes à dépanner avant de réaliser que j'avais accidentellement tapé :au lieu de ;, sur ces écrans HD modernes, c'est facile à manquer ...
user5359531
7

Vous pouvez simplement

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

Depuis la page de manuel:

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
la source