Как сделать так, чтобы этот скрипт bash НЕ удалял все мои файлы?

#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 минут.