Как выполнить команду при изменении файла в Linux?

Вы попали в нужное место, если хотите узнать, как запускать команды Linux при изменении любого файла в рабочем каталоге и при создании новых файлов.

В Linux вы можете использовать cron для планирования запуска команд в определенное время.

Но что, если вам нужно, чтобы команды запускались каждый раз при изменении файла или при добавлении нового файла в каталог?

Это также легко достижимо, и для этого есть несколько инструментов командной строки.

Давайте начнем!

watchexec

watchexec это удобный и автономный инструмент, который отслеживает заданный рабочий каталог и выполняет команду, если обнаруживает какие-либо изменения, такие как обновление файла или создание нового файла.

Функции

  • Он не требует сложной командной строки, включающей xargs (расширенные аргументы).
  • Проверяет наличие изменений в текущем каталоге и всех подкаталогах в режиме реального времени.
  • Нет необходимости в языковой среде выполнения, и она не связана с каким-либо конкретным языком или экосистемой.
  • .gitignore и .ignore используются по умолчанию, чтобы решить, для каких файлов игнорировать уведомления.
  • Группы процессов используются для отслеживания разветвляющихся программ.
  • Поддерживается просмотр файлов с определенным расширением.
  • Он совместим с OS X, Linux и Windows.
  • Фильтрация и игнорирование событий на основе glob (возможны шаблоны поиска файлов для нахождения частично идентичных имен файлов.

Установка watchexec

Чтобы легко установить инструмент watchexec, вставьте следующую ссылку в терминал или приглашение оболочки и нажмите клавишу ввода.

Линукс и макОС

curl -sS https://webinstall.dev/watchexec | bash

После успешной установки путь отобразится на экране. В моем случае этот инструмент был установлен в /root/.local/bin

┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash

Thanks for using webi to install '[email protected]' on 'Linux/x86_64'.
Have a problem? Experience a bug? Please let us know:
        https://github.com/webinstall/webi-installers/issues

Lovin' it? Say thanks with a Star on GitHub:
        https://github.com/webinstall/webi-installers

Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec
Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec

А после установки перейдите в репозиторий .local/bin и проверьте, есть ли файл там или нет, с помощью этих команд.

cd .local/bin

ls

Следующим шагом является экспорт пути для использования инструмента watchexec.

export PATH="/root/.local/bin:$PATH"

Для запуска просто введите watchexec в терминале как пользователь root. Используйте эту команду, чтобы увидеть, какие флаги и параметры можно использовать с инструментом watchexec.

watchexec --help

Примеры примеров команд

  • Вызовите ls -la при изменении любого файла в этом каталоге/подкаталоге. Эта команда показывает все файлы, присутствующие в каталоге, всякий раз, когда обнаруживает какую-либо модификацию.
watchexec -- ls -la
  • Всякий раз, когда какой-либо из файлов расширений python, js, CSS или Html в текущем каталоге изменяется, запускайте команду. Здесь вы можете передать любую команду, которую хотите. Расширения файлов должны быть разделены запятой.
 watchexec --exts py,js,css,html <command>
  • Выполнить команду при изменении любого файла в lib или src. Параметр «-w» отслеживает определенный файл или каталог в системе.
watchexec -w lib -w src <command>
  • Вызов/перезапуск любой службы при изменении любого файла в текущем каталоге (и всех подкаталогах).
watchexec -e html -r tor

watchexec -e js,py -r mysql

Здесь опция «-r» перезапускает процесс или службу, если они запущены в системе.

  Как выполнить двойную загрузку Arch Linux и Windows 11

Для получения дополнительных примеров использования watchexec вы можете посетить официальный репозиторий GitHub.

вход

вход — это простая и превосходная утилита командной строки для запуска произвольных команд, когда в заданном каталоге происходят какие-либо изменения.

«entr» означает Event Notify Test Runner. Этот инструмент был создан с целью обеспечения быстрой обратной связи и автоматизированного тестирования.

Монтаж

Entr предустановлен в дистрибутиве Linux. Если он отсутствует, вам необходимо установить его вручную.

Этот инструмент прост в использовании и может быть установлен с помощью следующей команды.

sudo apt-get install entr

Или вы также можете установить его, клонировав официальный Git-репозиторий.

git clone https://github.com/eradman/entr.git

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

./configure
make test
make install

Чтобы увидеть доступные параметры сборки, запустите ./configure -h

  Запишитесь на эти сертификационные курсы Linux, чтобы стать системным администратором

Примеры примеров команд

Чтобы увидеть параметры и аргументы, доступные для команды entr. Используйте следующую команду.

man entr

Эта команда отображает руководство пользователя для команды entr.

NAME
     entr — run arbitrary commands when files change

SYNOPSIS
     entr [-acdnprsz] utility [argument /_ ...]

DESCRIPTION
     A list of files provided on standard input, and the utility is executed using the supplied arguments
     if any of them change.  entr waits for the child process to finish before responding to subsequent
     file system events.  A TTY is also opened before entering the watch loop in order to support interac‐
     tive utilities.

     The arguments are as follows:

     -a      Respond to all events which occur while the utility is running.  Without this option, entr
             consolidates events in order to avoid looping.  This option has no effect in conjunction with
             the -r flag.

     -c      Clear the screen before invoking the utility specified on the command line.  Specify twice to
             erase the scroll back buffer.

     -d      Track the directories of regular files provided as input and exit if a new file is added.
             This option also enables directories to be specified explicitly.  If specified twice, all new
             entries to a directory are recognized, otherwise files with names beginning with ‘.’ are ig‐
             nored.

     -n      Run in non-interactive mode.  In this mode entr does not attempt to read from the TTY or
             change its properties.

     -p      Postpone the first execution of the utility until a file is modified.

 Manual page entr(1) line 1 (press h for help or q to quit)
  • Для запуска и автоматической перезагрузки сервера MySQL при изменении любого файла JavaScript в рабочем каталоге. Каждый раз, когда изменения сохраняются в файл, entr перезагружает сервер MySQL.
 ls *.js | entr -r mysql
  • Для автоматической перезагрузки веб-сервера или прекращения работы в случае выхода сервера.
$ ls * | entr -rz ./httpd

Для получения более подробной информации и примеров команды entr вы можете посетить их официальный сайт. Репозиторий GitHub.

  Как сделать резервную копию настроек Wine в Linux

Заключительные слова 👩‍💻

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

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