¿Cómo ejecutar el comando cuando cambia el archivo en Linux?

Ha venido al lugar correcto si desea aprender a ejecutar comandos de Linux cuando cambia cualquier archivo en un directorio de trabajo y cuando se crean nuevos archivos.

En Linux, puede usar cron para programar comandos para que se ejecuten en ciertos momentos.

Pero, ¿qué sucede si necesita ejecutar comandos cada vez que se modifica un archivo o se agrega un nuevo archivo a un directorio?

Eso también es fácil de lograr, y hay algunas herramientas de línea de comandos para hacerlo.

¡Empecemos!

relojejec

relojejec es una herramienta práctica e independiente que supervisa un directorio de trabajo determinado y ejecuta un comando si detecta algún cambio, como la actualización de un archivo o la creación de un nuevo archivo.

Características

  • No requiere una línea de comando compleja que involucre xargs (argumentos extendidos).
  • Comprueba los cambios en el directorio actual y todos los subdirectorios en tiempo real.
  • No hay necesidad de un tiempo de ejecución de idioma y no está conectado a ningún idioma o ecosistema específico.
  • .gitignore e .ignore se usan de forma predeterminada para decidir qué archivos ignorar para las notificaciones.
  • Los grupos de procesos se utilizan para realizar un seguimiento de los programas de bifurcación.
  • Se admite la visualización de archivos con una determinada extensión.
  • Es compatible con OS X, Linux y Windows.
  • Es posible filtrar e ignorar eventos basados ​​en glob (patrones de búsqueda de archivos para encontrar nombres de archivos parcialmente idénticos).

Instalación de watchexec

Para instalar fácilmente la herramienta watchexec, pegue el siguiente enlace en la terminal o en un indicador de shell y presione Intro.

  Cómo usar el comando grep en Linux

Linux y mac OS

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

Después de la instalación exitosa, la ruta se mostrará en la pantalla. En mi caso, esta herramienta se instaló en /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

Y después de la instalación, navegue al repositorio .local/bin y verifique si el archivo está allí o no usando estos comandos.

cd .local/bin

ls

El siguiente paso es exportar la ruta para usar la herramienta watchexec.

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

Para ejecutar, simplemente escriba watchexec en la terminal como usuario root. Use este comando para ver qué banderas y opciones se pueden usar con la herramienta watchexec.

watchexec --help

Comandos de ejemplo de muestra

  • Llame a ls -la cuando cualquier archivo cambie en este directorio/subdirectorio. Este comando muestra todos los archivos presentes en el directorio cada vez que detecta alguna modificación.
watchexec -- ls -la
  • Cada vez que alguno de los archivos de extensión python, js, CSS o Html en el directorio actual cambie, ejecute el comando. Aquí puede pasar cualquier comando que desee. Las extensiones de archivo deben estar separadas por una coma.
 watchexec --exts py,js,css,html <command>
  • Ejecute el comando cuando cambie cualquier archivo en lib o src. La opción “-w” observa un archivo o directorio específico en el sistema.
watchexec -w lib -w src <command>
  • Llame/reinicie cualquier servicio cuando cambie cualquier archivo en el directorio actual (y todos los subdirectorios).
watchexec -e html -r tor

watchexec -e js,py -r mysql

Aquí, la opción «-r» reinicia el proceso o servicio si se está ejecutando en el sistema.

  Las 7 mejores aplicaciones de emulador para Linux que debes probar

Para obtener más ejemplos de uso de watchexec, puede visitar el repositorio oficial de GitHub.

entrada

entrada es una utilidad de línea de comandos simple y excelente para ejecutar comandos arbitrarios cuando se producen modificaciones en un directorio determinado.

“entr” significa Event Notify Test Runner. Esta herramienta fue creada con el objetivo de hacer una retroalimentación rápida y pruebas automatizadas.

Instalación

entr está preinstalado en la distribución de Linux. En caso de que falte, debe instalarlo manualmente.

Esta herramienta es fácil de usar y se puede instalar con el siguiente comando.

sudo apt-get install entr

O también puedes instalarlo clonando el oficial repositorio Git.

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

Luego, navegue a ese directorio e instale los requisitos usando los siguientes comandos.

./configure
make test
make install

Para ver las opciones de compilación disponibles, ejecute ./configure -h

Comandos de ejemplo de muestra

Para ver las opciones y argumentos disponibles para el comando entr. Utilice el siguiente comando.

man entr

Este comando muestra el manual del usuario para el comando 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)
  • Para iniciar y recargar automáticamente un servidor MySQL cuando cualquier archivo JavaScript cambia en el directorio de trabajo. Cada vez que se guardan los cambios en el archivo, entr vuelve a cargar el servidor MySQL.
 ls *.js | entr -r mysql
  • Para recargar automáticamente un servidor web o terminar si el servidor sale.
$ ls * | entr -rz ./httpd

Para obtener más detalles y ejemplos sobre el comando de entrada, puede visitar su sitio web oficial. repositorio GitHub.

  Cómo escuchar la radio en el escritorio de Linux con Gradio

Palabras finales 👩‍💻

Espero que haya encontrado este artículo muy útil para aprender a ejecutar comandos de Linux cuando cambia cualquier archivo en un directorio determinado y cuando se crean nuevos archivos.

También puede estar interesado en aprender cómo eliminar archivos y directorios en Linux.