Ответ 1
Фактически вы отправляете rm
вывод на вход find
. Вы хотите использовать вывод find
как arguments в 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.
<суб > P.S. Обратите внимание, что прямой канал rm
не является опцией, потому что rm
не ожидает имени файла на стандартном входе. То, что вы сейчас делаете, передает их назад.