Jesteś rzeczywiście potokiem rm
„s wyjścia do wejścia find
. To, czego chcesz, to użycie danych wyjściowych find
jako argumentów do rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
jest poleceniem, które „konwertuje” swoje standardowe wejście na argumenty innego programu lub, jak dokładniej umieszcza je na man
stronie,
budować i wykonywać wiersze poleceń ze standardowego wejścia
Zauważ, że jeśli nazwy plików mogą zawierać białe znaki, powinieneś to poprawić:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Ale w rzeczywistości find
ma do tego skrót: -delete
opcja:
find -type f -name '*.sql' -mtime +15 -delete
Należy pamiętać o następujących ostrzeżeniach w 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 Zauważ, że bezpośrednie przesyłanie potokiem do rm
nie jest opcją, ponieważ rm
nie oczekuje nazw plików na standardowym wejściu. To, co obecnie robisz, to przepychanie ich do tyłu.