Als Folge der Antwort von mouviciel können Sie dies auch als for-Schleife ausführen, anstatt xargs zu verwenden. Ich finde xargs oft umständlich, besonders wenn ich in jeder Iteration etwas Komplizierteres tun muss.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Wie einige Leute kommentiert haben, schlägt dies fehl, wenn die Dateinamen Leerzeichen enthalten. Sie können dies umgehen, indem Sie den IFS (Internal Field Separator) vorübergehend auf das Zeilenumbruchzeichen setzen. Dies schlägt auch fehl, wenn \[?*
die Dateinamen Platzhalterzeichen enthalten. Sie können dies umgehen, indem Sie die Platzhaltererweiterung (Globbing) vorübergehend deaktivieren.
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Wenn Ihre Dateinamen Zeilenumbrüche enthalten, funktioniert dies auch nicht. Mit einer xargs-basierten Lösung sind Sie besser dran:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Die mit Klammern versehenen Klammern müssen hier -print0
für beide or
Klauseln gelten.)
GNU und * BSD find haben auch eine -delete
Aktion, die so aussehen würde:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rm
ein Teil des OP-Codes ist, aber es ist für die gestellte Frage nicht wirklich relevant. Ich denke, es wäre sicherer, wenn die Antworten mit einem harmlosen Befehl wie formuliert würdenecho
.