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

Я пытаюсь написать команду, чтобы помочь очистить старые файлы кеша. Файлы всегда либо .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

4 ответа

Решение

Проблема в том, что добавление -exec ... до конца всех тех -o flags отключает приоритет AND и OR, например, находит все, что является *.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 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

Попробуйте вместо этого с 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 использует пустые символы вместо пробелов для разделителей, чтобы гарантировать правильную обработку нечетных имен файлов (например, имен файлов с пробелами).

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

Другие вопросы по тегам