"Find: fehlendes Argument für -exec" bei Verwendung von "-exec rm -f {} \"

12

Ich führe diesen Befehl aus:

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

Ich habe Ausgabe unten:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

Was ist der genaue Befehl, um eine Datei aus dem aktuellen Verzeichnis zu finden und mit zu entfernen -exec?

Akshay Patel
quelle
1
Kannst du nicht einfach dazu rm "IMAG1806.jpg"? Es befindet sich im selben Verzeichnis, sodass Sie wissen, wie es heißt.
TheWanderer
@ Zacharee1 - würde davon ausgehen, dass das OP einen "Probelauf" macht. Ich würde erwägen, ein -i mit rm zu verwenden, nur für den Fall, dass Ihre Suche mehr Dateien "findet" als beabsichtigt oder zumindest ohne das -exec ausgeführt wird und die Dateiliste überprüft
Panther
1
@ Zacharee1: Der Befehl find löscht alle mit diesem Namen aufgerufenen Dateien im aktuellen Verzeichnis und in allen seinen Unterverzeichnissen (in beliebiger Tiefe).
Dennis
3
Oder anstatt -exec rmnur -deletedirekt zu verwenden.
Braiam

Antworten:

30

Sie haben das a ;am Ende verpasst (und auch ein Leerzeichen zwischen {}und ;). Der richtige Befehl lautet:

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

;gibt das Ende des -execPrädikats von an find.

Beachten Sie auch, dass wir verwendet haben, \;dh\ davor verwendet haben ;, um der Interpretation von ;by shell zu entgehen , da Shell andernfalls ;als Ende des gesamten findBefehls behandelt und finddenselben Fehler auslöst. Sie können auch ';'anstelle von verwenden \;.

Sie haben \am Ende verwendet. Dies zeigt an, dass Ihre Shell weiterhin Eingaben über PS2(angezeigt durch >) annimmt. Sie haben IMAG1806.jpgerneut eingegeben , sodass der gesamte Befehl wie folgt lautet:

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

Wie Sie sehen, ist dies kein gültiger Befehl mit IMAG1806.jpgam Ende, ohne Schließen des -execPrädikats und ohne Leerzeichen zwischen {}und \;.

heemayl
quelle
1
„Sie verfehlten die einen ;am Ende“ Danke für diese verbrachten 10 Minuten zur Fehlerbehebung , bevor ich realisiert hatte ich versehentlich getippt :statt ;, auf diesen modernen HD - Bildschirmen seine leicht zu verpassen ...
user5359531
7

Sie können einfach

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

Von der Manpage:

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
quelle