Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.
Подойдет для разработчиков, системных администраторов и DevOps
Реклама: @dad_admin
Post #553
700
Отслеживание появления новых файлов и их автоархивация
Иногда нужно автоматически реагировать на новые файлы: сервис складывает логи, система генерирует отчеты или приложение пишет дампы Вместо cron-сканирования каталога можно использовать inotify - это механизм ядра linux для отслеживания изменений файловой системы.
▪️ Слушаем каталог. Инструмент -
🛠 Скрипт автоархивации
1. inotifywait ловит появление файла
2. имя файла передаётся в цикл
3. создается архив tar.gz
▪️ Практический кейс Приложение пишет дампы:
Скрипт автоматически делает:
Без cron и без опроса каталога.
⚠️ Важный нюанс. Иногда файл появляется до завершения записи. Лучше ловить событие close_write:
Это означает: файл закрыт после записи.
▪️ Бонус: автоудаление исходника
Каталог остается чистым.
BashTex 📱 #bash #scripts
Иногда нужно автоматически реагировать на новые файлы: сервис складывает логи, система генерирует отчеты или приложение пишет дампы Вместо cron-сканирования каталога можно использовать inotify - это механизм ядра linux для отслеживания изменений файловой системы.
▪️ Слушаем каталог. Инструмент -
inotifywait (пакет inotify-tools). Простейший пример:
inotifywait -m /data/incoming -e create
-m - режим постоянного мониторинга-e create - событие создания файла🛠 Скрипт автоархивации
#!/usr/bin/env bash
WATCH_DIR="/data/incoming"
ARCHIVE_DIR="/data/archive"
mkdir -p "$ARCHIVE_DIR"
inotifywait -m -e create --format '%f' "$WATCH_DIR" | while read -r file; do
echo "Новый файл: $file"
tar -czf "$ARCHIVE_DIR/${file}.tar.gz" -C "$WATCH_DIR" "$file"
echo "Архив создан: ${file}.tar.gz"
done
1. inotifywait ловит появление файла
2. имя файла передаётся в цикл
3. создается архив tar.gz
▪️ Практический кейс Приложение пишет дампы:
dump_001.sql
dump_002.sql
dump_003.sql
Скрипт автоматически делает:
dump_001.sql.tar.gz
dump_002.sql.tar.gz
dump_003.sql.tar.gz
Без cron и без опроса каталога.
⚠️ Важный нюанс. Иногда файл появляется до завершения записи. Лучше ловить событие close_write:
inotifywait -m -e close_write --format '%f' "$WATCH_DIR"
Это означает: файл закрыт после записи.
▪️ Бонус: автоудаление исходника
tar -czf "$ARCHIVE_DIR/${file}.tar.gz" -C "$WATCH_DIR" "$file" && rm "$WATCH_DIR/$file"
Каталог остается чистым.
BashTex 📱 #bash #scripts
- 👍 11



