Problem mit find: ungültiges Prädikat '-delete'

3

Ich versuche zu laufen (Unix-Shell, Win7):

find . -maxdepth 1 -name "*.jpg" -size -50k -delete

und erhalte den Fehler:

find: invalid predicate '-delete'

irgendwelche Hinweise?

Kay
quelle

Antworten:

5

Möglicherweise sind die xargs auch hilfreich, nicht nur bei Such- und Löschvorgängen, sondern auch bei anderen Vorgängen, bei denen Sie nach dem Ausführen eines Befehls möglicherweise Text verarbeiten möchten. In diesem Fall,

find . -maxdepth 1 -name "*.jpg" -size -50k | xargs rm -f

Überprüfen Sie Ihre Arbeit immer zuerst mit einem "Echo" vor xargs (damit Sie sehen können, wie die Befehle aussehen, bevor Sie sie ausführen). Welches würde so aussehen:

find . -maxdepth 1 -name "*.jpg" -size -50k | xargs echo rm -f
dougBTV
quelle
Die Version mit enthält echonicht die Dateien, die von gefunden wurden find. Es ignoriert die Eingabe und gibt die Literalzeichenfolge 'xargs rm -f' wieder.
Chepner
Danke - xargs ist wohl die schlaueste. Eines jedoch: Wie man Dateinamen mit Leerzeichen einfügt. IFS=$'\t\n'hat bei mir nicht funktioniert .. Und würde es einen Befehl geben, der die Dateien in den Papierkorb legt, anstatt sie dauerhaft zu löschen?
Kay
@ Kay - Kein Problem! Für die Leerzeichen müssen Sie das Argument in xargs mit dem Flag "-i" positionieren. Wie ... find . | xargs -i rm -f "{}" Also -i sagt "Ich werde das Argument positionieren" und das {} sagt "Hier möchte ich es positionieren". Dann das Zitat, das deiner Muschel sagt: "Hey Mann, in diesem Ding steckt Müll. Nimm einfach das Zeug in die Anführungszeichen."
dougBTV
@Chepner - hoppla! Ich hatte das echoam falschen Ort. Ich habe es verschoben, es sollte jetzt so funktionieren, wie ich es gemeint habe.
dougBTV
@ Kay - Lies noch einmal, ich würde sie nach / tmp verschieben. Sie können dasselbe mit der Position machen, wie ....find . | xargs -i mv "{}" /tmp/
dougBTV
4

Der Version von findgefunden aus der Unix-Shell, die Sie ausführen (aus Windows), fehlt das -deletePrädikat.

Eine mögliche Alternative ist:

find . -maxdepth 1 -name "*.jpg" -size -50k -exec rm {} \;
Verdächtiger
quelle