Ви на самому справі обжигающе rm«s вихід до входу find. Те, що ви хочете, - використовувати вихідний аргументfind як аргументи для rm:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargsце команда, яка "перетворює" свій стандартний вхід в аргументи іншої програми або, як вони точніше розміщують її на manсторінці,
будувати та виконувати командні рядки зі стандартного вводу
Зауважте, що якщо імена файлів можуть містити символи пробілу, вам слід виправити це:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Але насправді findдля цього є ярлик: -deleteпараметр:
find -type f -name '*.sql' -mtime +15 -delete
Будьте в курсі таких попереджень 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 Зауважте, що rmпідключення безпосередньо до не є варіантом, оскільки rmне очікує назви файлів на стандартному вході. Те, що ви зараз робите, - це обертання їх назад.