У меня есть каталог с файлами 2010 года. Я хочу удалить все файлы старше 500 дней, и я попробовал это:
find /var/log/arc/* -type f -mtime +500 -delete {}\;
Но я получаю это:
-bash: /usr/bin/find: Argument list too long
Как я знаю, это означает, что файлов слишком много, и я find
не могу их обработать. Но даже если я ставлю, +2000
что 3+ года, я все равно получаю это.
Что мне здесь не хватает?
Ответы:
Вам не хватает, что
find
не нужно список файлов в качестве входных данных. Проблема в том, что глобус/var/log/arc/*
расширяется до слишком большого количества файлов. Тем не менее,find
по умолчанию вернется в подкаталоги, поэтому нет необходимости использовать glob вообще:-delete
это нестандартный предикат. Если вашаfind
реализация не поддерживает это, вы можете использовать:вместо.
источник
find: invalid predicate
-delete'`-delete
Не принимает{}
. Смотрите обновление. Тем не менее, ваше сообщение об ошибке указывает на то, что ваша версияfind
не поддерживает-delete
. Если вы не используете GNUfind
(что в большинстве случаев не будет, если вы не используете Linux), вам нужно использовать-exec -rm {} \;
вместо этого.-exec rm {} \;
Покажи фокус.-exec
это определяется POSIX .