Sie leiten rm
den Ausgang tatsächlich an den Eingang von weiter find
. Was Sie wollen, ist die Ausgabe von find
als Argumente für rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
ist der Befehl, der seine Standardeingabe in Argumente eines anderen Programms "konvertiert" oder, wie sie genauer auf die man
Seite setzen,
Erstellen und Ausführen von Befehlszeilen aus Standardeingaben
Beachten Sie, dass Sie Folgendes korrigieren sollten, wenn Dateinamen Leerzeichen enthalten können:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Aber eigentlich find
hat eine Abkürzung dafür: die -delete
Option:
find -type f -name '*.sql' -mtime +15 -delete
Bitte beachten Sie die folgenden Warnungen in man find
:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
PS Beachten Sie, dass das direkte Weiterleiten an rm
keine Option ist, da rm
bei der Standardeingabe keine Dateinamen erwartet werden. Was Sie gerade tun, ist, sie rückwärts zu leiten.