Удаление старых файлов кэша - команда 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:).