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 ...