Ви на самому справі обжигающе 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
не очікує назви файлів на стандартному вході. Те, що ви зараз робите, - це обертання їх назад.