Выполнение действий при появлении файла в каталоге Linux

Выполнение задачи при добавлении файла в каталог Linux

Тема сегодняшней статьи — автоматизация в Linux. Я покажу вам, как запустить выполнение определенных действий при появлении файла в каталоге Linux. Мы напишем скрипт, который следит за папкой и при появлении файла распакует его и переместит в другой каталог. Скрипт будет использовать inotify — компонент пакета инструментов inotify-tools.

Установка inotify-tools и gzip

Если вы используете Ubuntu или другой дистрибутив на основе Debian, тогда для установки inotify-tools в вашу операционную систему используйте apt-get . В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.

Использование inotify-tools

Давайте начнем с просмотра каталога и выяснения, какие события инициируются при появлении новых файлов. Создайте новый каталог с именем «incoming»:

Запустите мониторинг этого каталога, выполнив команду:

Команду прикажет inotify следить за всеми событиями в папке «incoming». Параметр -v заставляет инструмент выводить дополнительную информацию о том, что он делает. Если не указать параметр тайм-аута -t, команда будет собирать события до тех пор, пока мы не завершим работу с помощью CTRL + C. На этом этапе наш терминал должен выглядеть примерно так:

Выполнение действия при добавлении файла в каталог Linux

Откройте новое окно терминала (или вкладку) и перейдите в папку «incoming». Используйте команду touch, чтобы создать новый файл с именем «newfile».

Теперь вернитесь к первому окну терминала и остановите inotifywatch, нажав CTRL + C.

Выполнение действия при добавлении файла в каталог Linux

Таблица событий будет передана на консоль с указанием одного экземпляра «create», «open», «attrib» и «close_write». Эти четыре события произошли, когда мы использовали touch для создания нового файла и установки  прав доступа к нему. Это лишь некоторые из множества событий, которые можно отследить в файловой системе с помощью инструментов inotify. Вы можете увидеть полный список на главной странице inotifywatch.

РЕКОМЕНДУЕМ:
Программы резервного копирования Linux

Для мониторинга папки на выполнение определенных действий при появлении файла в каталоге Linux нас интересуют два события:

  • «create» — когда файл создается в целевой директории.
  • «move_to» — когда файл перемещается из другого места в целевой каталог.

Давайте попробуем inotifywatch снова, но на этот раз прикажем ему мониторить только эти два события. Запустите эту команду в первом окне терминала:

Во втором окне или вкладке терминала давайте попробуем создать новый файл, изменить его содержимое, а затем переместить файл из другого места в целевой каталог. Все эти команды запускаются из домашнего каталога.

Вернитесь к первому окну терминала и остановите inotifywatch, нажав CTRL + C. Мы увидим следующий вывод:

Выполнение действия при добавлении файла в каталог Linux

Были подсчитаны только два события: создание файла с именем «create.txt» и перемещение существующего файла с именем «made2.txt». Все остальное, например, изменение «create.txt», было проигнорировано.

Мониторинг папки и выполнение задачи

Теперь, когда мы знаем, какие события следует отслеживать, мы можем использовать другой инструмент, называемый inotifywait, чтобы блокировать выполнение до тех пор, пока файл не будет создан или перемещен в наш целевой каталог. Мы будем использовать те же аргументы, что и для inotifywatch, а также укажем, как мы хотим, чтобы имя файла выглядело.

РЕКОМЕНДУЕМ:
Мониторинг в Linux с помощью командой строки

Прежде чем мы начнем, нам нужен каталог для хранения файлов, которые уже были обработаны. Создайте каталог с именем «processed» — обработано:

Затем создайте новый скрипт с именем «watch-incoming.sh» и добавьте в него следующее:

Сценарий выполняет команду inotifywait с параметром -m. Каждый раз, когда обнаруживается новое событие, имя файла передается команде чтения и вводится в переменную «FILENAME». Выполняется блок в цикле while, в котором файл сначала перемещается в «обработанный» каталог, а затем распаковывается. Исходный файл заменяется сжатым файлом, а имя файла заканчивается на «.gz».

Давайте предоставим права на выполнение этого скрипта и запустим его из нашего домашнего каталога.

Откройте второе окно терминала и создайте новый файл во «входящем» каталоге. Перечислите содержимое как «входящего», так и «обработанного» каталога, чтобы увидеть результаты обнаруженного события:

Выполнение действия при добавлении файла в каталог Linux

Необработанный текстовый файл, который мы скопировали в папку «incoming», был обнаружен сценарием, скопирован в папку «processed» и затем сжат с помощью gzip.

Теперь мы можем выполнять некоторые интересные задачи. Например, мы могли бы наложить водяной знак на файлы изображений, сжать оригинальные видео в формат mp4 и даже загрузить каждый новый файл, который мы видим, в корзину Amazon S3. Этот сценарий является хорошей отправной точкой для развертывания ваших собственных рабочих процессов и автоматизации общих задач в вашей системе.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий