Як виконати команду, коли файл змінюється в Linux?

| | 0 Comments| 4:42 PM
Categories:

Ви потрапили в потрібне місце, якщо хочете навчитися запускати команди Linux, коли змінюється будь-який файл у робочому каталозі та коли створюються нові файли.

У Linux ви можете використовувати cron для планування виконання команд у певний час.

Але що, якщо вам потрібно, щоб команди запускалися щоразу, коли файл змінюється або новий файл додається до каталогу?

Це також легко досягти, і є деякі інструменти командного рядка для цього.

Давайте розпочнемо!

watchexec

watchexec це зручний і автономний інструмент, який відстежує певний робочий каталог і виконує команду, якщо виявляє будь-які зміни, такі як оновлення файлу або створення нового файлу.

особливості

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

Встановлення watchexec

Щоб легко встановити інструмент watchexec, вставте наступне посилання в термінал або підказку оболонки та натисніть enter.

Linux і macOS

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» перезапускає процес або службу, якщо вони запущені в системі.

  Як використовувати usermod для додавання користувачів до груп у Linux

Щоб отримати додаткові приклади використання 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 з iPad

Зразок прикладів команд

Щоб переглянути параметри та аргументи, доступні для команди 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.

  Як встановити статичну IP-адресу в Linux в Менеджері мережі

Заключні слова 👩‍💻

Сподіваюся, ви знайшли цю статтю дуже корисною для вивчення того, як запускати команди Linux, коли будь-який файл у даному каталозі змінюється та коли створюються нові файли.

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