#bash #delete-file #backup-strategies
#bash #удалить-файл #резервное копирование-стратегии
Вопрос:
У меня есть задание cron, каждые 5 минут, резервное копирование моего MYSQL в файлы, заканчивающиеся на .sql.gz . Но это сотни файлов в день. Итак, я поискал в Интернете и нашел этот скрипт bash, который, как я ожидал, будет работать только с файлами в указанной папке / backup и только с ними.sql.gz файлы. но вскоре я обнаружил, что он удалил все в моей корневой папке. 🙂 Я смог вернуть файлы по FTP и создать резервную копию своего сайта через полчаса, но мне все еще нужен скрипт для работы по назначению. Я новичок в написании сценариев bash, поэтому я спрашиваю, что я сделал не так, отредактировав скрипт, который я нашел в Интернете, для своих нужд? Что будет работать?
Вот сценарий изгоев. НЕ запускайте это как есть. он сломан, вот почему я здесь:
find /home/user/backups/*.gz * -mmin 60 -exec rm {} ;
Я подозреваю, что последняя обратная косая черта должна быть /home/user/backup/
А также я должен удалить * before -min
итак, что мне нужно, должно быть:
find /home/user/backups/*.gz -mmin 60 -exec rm {} /home/user/backups/;
Я прав? Или все еще чего-то не хватает?
Кстати, я запускаю это на Dreamhost shared hosting CRON. Их служба поддержки действительно не хочет помогать с вопросами BASH, я пытался.
Комментарии:
1. Замените
rm
наecho
, пока он не будет выглядеть безопасным2. и на CPANEL cron мне будут отправлены по электронной почте результаты echo, верно?
3. Да, echo работало нормально, я получил результаты по электронной почте. это было полезно, большое спасибо.
Ответ №1:
Аргументами имени find
файла должны быть каталоги для запуска рекурсивного поиска. Затем используйте -name
и другие параметры, чтобы отфильтровать файлы, соответствующие нужным вам критериям.
find /home/user/backups -type f -name '*.sql.gz' -mmin 60 -exec rm {}
-type f
означает только выбор обычных файлов-name '*.sql.gz'
означает только имена файлов, заканчивающиеся на.sql.gz
-mmin 60
означает файлы старше 60 минут
И использование
вместо ;
в конце -exec
означает, что он должен просто запустить команду один раз со всеми выбранными именами файлов, а не отдельно для каждого имени файла; это незначительное повышение эффективности.
Комментарии:
1. Большое вам спасибо! Сработало как шарм. Удалены все резервные копии старше 60 минут.