У меня есть кеш-папка с минимум 15000 файлов.
Я попробовал это:
find cache* -mtime +30 -exec rm {} \;
Но это заставило мой сервер загружаться в небо!
Есть ли более быстрое / лучшее решение?
Или я могу ограничить скорость или итерации этой команды?
linux
ubuntu
command-line
find
Kristian
источник
источник
cache*
расширяется до многих файлов, вы можете попробовать что-то вродеfind . -name 'cache*' -mtime +30 -exec rm {} \;
этого.Ответы:
Мне нравится использовать
tmpwatch
для этих вещей, это в последний раз файл был изменен. Это просто и хорошо работает во многих случаях:Для Ubuntu, проверьте
tmpreaper
вместо этого.Если вы хотите проверить последний раз, когда к файлу обращались, используйте следующее:
Вы не можете использовать tmpwatch -a в файловых системах, смонтированных с noatime. вы все еще можете использовать -m
источник
Ubuntu 10.04.2 LTS
и эта команда не существует ..tmpreaper
вместо этого.Вы можете избежать порождения нового процесса для каждого файла, используя
источник
Попробуйте запустить выше с хорошим:
Таким образом, огромная нагрузка появится только в том случае, если больше ничего не нужно запускать, в противном случае другие процессы будут иметь приоритет (если их точность меньше 19, то есть максимальная).
Обратите внимание, что аргумент опции -n добавляется к стандартному значению, которое варьируется от -20 до 19. Я использовал 39, так что это будет очень приятно, независимо от того, какое значение было изначально.
источник
Как прокомментировал chiborg, загрузка происходит из-за запуска rm для каждого найденного файла. Я заметил ответ, где
tmpwatch
предлагается в качестве альтернативы, который, я уверен, работает хорошо. Однако это не обязательно.Find может выполнить команду, заданную для exec, один раз, если вы скажете ей накапливать найденные файлы в список аргументов следующим образом:
Иногда это может не сработать, поскольку список аргументов может увеличиваться (в байтах), чем максимально допустимый оболочкой (getconf ARG_MAX). Это может быть решено с помощью xargs с опцией -L.
рассмотрим этот пример:
Поэтому нет необходимости устанавливать дополнительное программное обеспечение, все, что вам нужно, это в gnu-findutils:
источник
\+
; равнина+
достаточно хороша. (2) Это не «не сработает, потому что список аргументов может стать большим…».find … -exec … {} +
будет делать то же самое, чтоxargs
будет делать; он будет запускать команду столько раз, сколько потребуется. Например (как в вашем примере), если у вас есть от 15001 до 20000 файлов, программа dfind
будет запускаться четыре раза.-exec
rm