Lösung 1:
Ich finde das im Allgemeinen mit dem -exec
Option für find
einfacher und weniger verwirrend sein. Versuchen Sie Folgendes:
find . -name vmware-*.log -exec rm -i {} \;
Alles nach -exec
wird als Befehl angesehen, der für jedes Ergebnis ausgeführt wird, bis zu ;
, das hier maskiert wird, damit es an find
übergeben wird . Die {}
wird durch den Dateinamen ersetzt, der find
würde normalerweise drucken.
Sobald Sie überprüft haben, dass es Ihren Wünschen entspricht, können Sie -i
entfernen .
Lösung 2:
Wenn Sie GNU find
haben Sie können den -delete
verwenden Möglichkeit:
find . -name "vmware-*.log" -delete
Um xargs
zu verwenden und vermeiden Sie das Problem mit Leerzeichen in Dateinamen:
find . -name vmware-*.log -print0 | xargs -0 rm
Ihre Protokolldateien sollten jedoch keine Leerzeichen in ihren Namen enthalten. Textverarbeitungsdokumente und MP3-Dateien haben sie wahrscheinlich, aber Sie sollten in der Lage sein, die Namen Ihrer Protokolldateien zu kontrollieren.
Lösung 3:
Sie können find
sagen um die Ausgabeliste mit NULLen zu begrenzen, und xargs
um seine Eingabeliste zu erhalten, das gleiche:
$ ls -l "file 1" "file 2"
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 2
$ find . -name 'file *' -print0 | xargs -0 ls -l
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 2
$ find . -name 'file *' -print0 | xargs -0 rm -v
removed `./file 2'
removed `./file 1'
Stellen Sie außerdem sicher, dass Sie *
maskieren , entweder mit einem umgekehrten Schrägstrich oder indem Sie den vmware-*.log
enthalten in einfache Anführungszeichen, sonst könnte Ihre Shell versuchen, es zu erweitern, bevor es an find
übergeben wird .
Lösung 4:
Vergessen Sie nicht die -delete
des Fundes Möglichkeit. Es entfernt die Datei ohne Fehler mit Sonderzeichen ...