Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
IT и технологии · 22 января 2026 г.
🚀 Полезный Bash-скрипт для архивации старых логов 🚀 — 22 января 2026 г. в 13:19:07.621
🚀 Полезный Bash-скрипт для архивации старых логов 🚀 Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать всё свободное место. Предлагаю простой скрипт, который: 1. Находит файлы с расширением .log, изменённые более чем N дней назад. 2. Архивирует их в тарболл с датой. 3. Удаляет оригиналы после успешного архива. #!/usr/bin/env bash # # Архивация старых логов >7 дней # Сохраняет в /var/backups/logs/YYYY-MM-DD_logs.tar.gz # Настройки LOG_DIR="/var/log" # Каталог с логами BACKUP_DIR="/var/backups/logs" # Куда складывать архивы DAYS_OLD=7 # Возраст файлов в днях # Создаём папку для бэкапов, если нет mkdir -p "$BACKUP_DIR" # Текущая дата DATE=$(date '+%Y-%m-%d') # Найти *.log старше N дней и упаковать в архив find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \ -mtime +"$DAYS_OLD" -print0 | \ tar --null -czf "$BACKUP_DIR/${DATE}_logs.tar.gz" --files-from - # Проверка успешности и удаление исходников if [[ $? -eq 0 ]]; then echo "✅ Архив создан: $BACKUP_DIR/${DATE}_logs.tar.gz" # Удаляем старые логи find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \ -mtime +"$DAYS_OLD" -delete echo "🗑️ Оригиналы удалены." else echo "❌ Ошибка при создании архива!" exit 1 fi Как это работает ▪️find … -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" Использует регулярное выражение, чтобы найти все файлы с именами, состоящими из букв, цифр, подчёркиваний или дефисов, и оканчивающиеся на .log. ▪️Опция -mtime +7 выбирает файлы старше 7 дней. ▪️tar --null --files-from - позволяет безопасно работать с именами, содержащими пробелы. ▪️При успешном создании архива исходные файлы удаляются командой -delete в find. ❓ Совет: Добавьте этот скрипт в cron, чтобы он выполнялся автоматически, например, каждый день в 2:00: 0 2 * * * /usr/local/bin/archive_logs.sh >> /var/log/archive_logs_cron.log 2>&1 👍 Надеюсь, пригодится! 👉 @bash_srv

