Jesteś rzeczywiście potokiem rm„s wyjścia do wejścia find. To, czego chcesz, to użycie danych wyjściowych findjako argumentów do rm:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargsjest poleceniem, które „konwertuje” swoje standardowe wejście na argumenty innego programu lub, jak dokładniej umieszcza je na manstronie,
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 findma do tego skrót: -deleteopcja:
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 rmnie jest opcją, ponieważ rmnie oczekuje nazw plików na standardowym wejściu. To, co obecnie robisz, to przepychanie ich do tyłu.