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