Ich wollte Dateien löschen, die größer als 2 MB in einem bestimmten Ordner waren. Also rannte ich:
find . -size +2M
Und ich habe eine Liste von zwei Dateien
./a/b/c/file1
./a/f/g/file2
Also renne ich dann:
find . -size +2M -exec rm ;
und ich bekomme die Fehlermeldung Find: missing argument to -exec
Ich überprüfe die Syntax in der Manpage und es heißt -exec command ;
Also versuche ich es stattdessen
find . -size +2M -exec rm {} +
Und es funktioniert. Ich verstehe, dass die {} es den Befehl wie rm file1 file2
statt ausführen lassen rm file1; rm file2;
.
Warum hat der erste nicht funktioniert?
ANTWORTEN:
Ich musste wohl nur ein paar Mal RTFM, um endlich zu verstehen, was es sagte. Obwohl im ersten Beispiel {} nicht angezeigt wird, sind die geschweiften Klammern in allen Fällen erforderlich. Und dann entweder \ hinzufügen; oder + je nach gewünschter Methode. Lesen Sie nicht nur die Überschrift. Lesen Sie auch die Beschreibung. Verstanden.
Aus Effizienzgründen ist es normalerweise besser, xargs zu verwenden:
quelle
Ich würde -exec dafür überhaupt nicht verwenden. find kann auch Dateien selbst entfernen:
(Dies ist wahrscheinlich ein GNUismus, weiß aber nicht, ob Sie dies in Nicht-Gnu-Fund finden würden)
quelle
Wie dokumentiert, benötigt -exec {} als Platzhalter für die Ausgabe von find.
Die endgültige Anleitung zur Verwendung von Bash- und GNU-Tools finden Sie hier
Wie Sie sehen können, wird der zweite Befehl, den Sie als Beispiel verwendet haben, explizit angezeigt.
quelle