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

cron для удаления файлов с определенным именем

У меня это в моем crontab

0 3 * * * mysqldump --host=10.100.100.3 --user=username --password=mypass --routines DBName | gzip > /tmp/mysqldumps/mydb.`date +"\%Y-\%m-\%d"`.gz

теперь мне нужно создать другое задание cron для выполнения этого сценария, предполагая, что мы находимся 3 мая 2011 года. Я хочу удалить файл, который был создан месяц назад т.е. rm mydb.2011-04-03.gz

Есть идеи, как сгенерировать это задание cron (как сгенерировать имя удаляемого файла)?

У вас есть несколько вариантов; Предлагаю два из них:

Удалите файл по дате (каждый день в каталоге назначения будет производиться поиск файлов старше одного месяца, и совпадения будут удаляться):

10 3 * * * find /tmp/mysqldumps/ -maxdepth 1 -ctime +30 -exec rm {} \;

Удалите файл по имени:

10 3 * * * rm /tmp/mysqldumps/mydb.`date -d "last month" +'%Y-%m-%d.gz'`

Я предпочитаю первый, потому что он более надежный. Также, если задание удаления cron по какой-то причине в один прекрасный день не запускается, на следующий день предыдущая команда сделает свое дело. В моем втором примере файл не будет удален.

Вместо анализа имени файла вы также можете проверить время изменения файла.

Следующая команда смотрит в /tmp/mysqldumps каталог. Имена файлов, начинающиеся с mydb. и заканчивая .gz, старше 30 дней удаляются.

find /tmp/mysqldumps -name 'mydb.*.gz' -mtime +30 -exec rm {} \;

Вы можете удалить файлы старше, например, 30 дней с помощью команды типа

rm -f `find /tmp/mysqldumps -mtime +30 -name mydb.\*.gz`