Удалить файлы старше 500 дней


10

У меня есть каталог с файлами 2010 года. Я хочу удалить все файлы старше 500 дней, и я попробовал это:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Но я получаю это:

-bash: /usr/bin/find: Argument list too long

Как я знаю, это означает, что файлов слишком много, и я findне могу их обработать. Но даже если я ставлю, +2000что 3+ года, я все равно получаю это.

Что мне здесь не хватает?


1
unix.stackexchange.com/a/239268/116858 (см. также комментарий)
Кусалананда

Ответы:


18

Вам не хватает, что findне нужно список файлов в качестве входных данных. Проблема в том, что глобус /var/log/arc/*расширяется до слишком большого количества файлов. Тем не менее, findпо умолчанию вернется в подкаталоги, поэтому нет необходимости использовать glob вообще:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteэто нестандартный предикат. Если ваша findреализация не поддерживает это, вы можете использовать:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

вместо.


Спасибо, но теперь получили это: find: invalid predicate -delete'`
Garg

1
@ Сперва, извини, я просто скопировал твою команду и не заметил, что твой синтаксис неправильный. -deleteНе принимает {}. Смотрите обновление. Тем не менее, ваше сообщение об ошибке указывает на то, что ваша версия findне поддерживает -delete. Если вы не используете GNU find(что в большинстве случаев не будет, если вы не используете Linux), вам нужно использовать -exec -rm {} \;вместо этого.
Тердон

Спасибо. -exec rm {} \;Покажи фокус.
Гарг

1
@hobbs Я не понимаю , почему нет, -execэто определяется POSIX .
Terdon

@terdon моя ошибка.
Хоббс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.