Вы попали в нужное место, если хотите узнать, как запускать команды 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» перезапускает процесс или службу, если они запущены в системе.
Для получения дополнительных примеров использования 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
Примеры примеров команд
Чтобы увидеть параметры и аргументы, доступные для команды 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.
Заключительные слова 👩💻
Я надеюсь, что вы нашли эту статью очень полезной для изучения того, как запускать команды Linux при изменении любого файла в данном каталоге и при создании новых файлов.
Вам также может быть интересно узнать, как удалять файлы и каталоги в Linux.