Назад | Перейти на главную страницу

Удаление старых файлов кеша - справка по командам

Я пытаюсь написать команду, которая поможет очистить старые файлы ресурсов кеша. Файлы всегда либо .css,.javascript,.css.gzip или .javascript.gzip и я хочу удалить все файлы старше 2 дней.

Я начал с этой команды, чтобы проверить, прежде чем перейти к exec rm:

find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css'

Это вернет все файлы, которые я хочу удалить, поэтому я добавил rm сделав команду:

find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -exec rm {} \;

На самом деле ничего не удаляется, я попробовал сделать rm команда rm -i и не было никаких подсказок, как будто на самом деле ничего не передается в rm.

Любые идеи?

FWIW это на коробке CentOS 5

Проблема в том, что добавление -exec ... до конца всех тех -o flags вызывает приоритет И по сравнению с ИЛИ, например, он находит все, что есть * .css.gzip ИЛИ * .javascript.gzip ИЛИ * .javascript ИЛИ (* .css И удалить его), поэтому он удаляет только * .css, но находит все другие файлы, но ничего с ними не делает. Между прочим, это также означает, что флаги типа и mtime применяются только к * .javascript.gzip.

Использовать

find /home/*/tmp/cache/* -mtime +2 -type f \( -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' \) -exec rm {} \;

чтобы заставить его найти все файлы с mtime +2 И введите f AND (все разные параметры имени файла) И удалите их.

Чтобы увидеть это в действии, замените -exec ... на -print как в вашей версии, так и в моей версии на ().

Вместо этого попробуйте использовать xargs:

find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -print0 | xargs -0p rm

то -p аргумент xargs будет предлагать вам удалить каждый пакет файлов. Если это сработает, вы можете удалить -p чтобы просто удалить все сразу.

В -print0 / -0 combo использует нули вместо пробелов в качестве разделителей, чтобы гарантировать правильную обработку нечетных имен файлов (например, имен файлов с пробелами).

Возьмите свою первую команду, подключитесь к xargs rm. Обычно мне нравится учитывать имена файлов с пробелами, поэтому попробуйте следующее:

find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -print0 | xargs -0 rm

Попробуйте изменить rm на echo и посмотрите, что он делает. Если ничего не возвращается, удалите эхо, и вы, вероятно, помните, что немного изменили команду перед добавлением rm :).