Ha llegado al lugar adecuado si desea aprender a ejecutar comandos de Linux cuando cambie cualquier archivo de un directorio de trabajo y cuando se creen archivos nuevos.
En Linux, puede utilizar cron
para programar comandos que se ejecuten a determinadas horas.
Pero, ¿y si necesita que los comandos se ejecuten cada vez que se modifique un archivo o se añada un nuevo archivo a un directorio?
Eso también es fácilmente realizable, y existen algunas herramientas de línea de comandos para llevarlo a cabo.
Empecemos
watchexec
watchexec
es una herramienta práctica e independiente que monitoriza un directorio de trabajo dado y ejecuta un comando si detecta algún cambio como la actualización de un archivo o la creación de uno nuevo.
Características
- No requiere una línea de comandos compleja que incluya
xargs
(argumentos extendidos). - Comprueba los cambios en el directorio actual y en todos los subdirectorios en tiempo real.
- No necesita un tiempo de ejecución de lenguaje y no está conectado a ningún lenguaje o ecosistema específico.
- .gitignore y .ignore se utilizan por defecto para decidir para qué archivos ignorar las notificaciones.
- Los grupos de procesos se utilizan para realizar un seguimiento de los programas que se bifurcan.
- Se admite la vigilancia de archivos con una extensión determinada.
- 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 el terminal o en un intérprete de comandos y pulse intro.
Linux y macOS
curl -sS https://webinstall.dev/watchexec | bash
Tras la instalación con éxito, la ruta aparecerá en la pantalla. En mi caso, esta herramienta se instaló en /root/.local/bin
┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash
Gracias por utilizar webi para instalar 'watchexec@stable' en 'Linux/x86_64'.
¿Tiene algún problema? ¿Ha experimentado un error? Por favor, háganoslo saber:
https://github.com/webinstall/webi-installers/issues
¿Le gusta? Denos las gracias con una estrella en GitHub:
https://github.com/webinstall/webi-installers
Encontrado /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Extrayendo /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Instalando en /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec
Instalado 'watchexec vcli-v1.18.9' como /root/.local/bin/watchexec
Y después de la instalación, navegue hasta el repositorio .local
/bin y compruebe si el archivo está allí o no utilizando estos comandos.
cd .local/bin
ls
El siguiente paso es exportar la ruta para utilizar la herramienta watchexec.
export PATH="/root/.local/bin:$PATH"
Para ejecutarlo, sólo tiene que escribir watchexec
en el terminal como usuario root. Utilice este comando para ver qué banderas y opciones pueden utilizarse con la herramienta watchexec.
watchexec --help
Ejemplos de comandos
- Llame a
ls -la
cuando cambie cualquier archivo en este directorio/subdirectorio. Este comando muestra todos los archivos presentes en el directorio cada vez que detecta alguna modificación.
watchexec -- ls -la
- Ejecute el comando cada vez que cambie alguno de los archivos de extensión python, js, CSS o Html en el directorio actual. Aquí puede pasar cualquier comando que desee. Las extensiones de archivo deben estar separadas por una coma.
watchexec --exts py,js,css,html <comando>
- Ejecuta el comando cuando cualquier archivo en
lib
osrc
cambia. la opción “-w” vigila un archivo o directorio específico del sistema.
watchexec -w lib -w src <comando>
- Llama/reinicia cualquier servicio cuando cambia 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.
Para más ejemplos de uso de watchexec, puede visitar el repositorio oficial de GitHub.
entr
entr
es una sencilla y excelente utilidad de línea de comandos para ejecutar comandos arbitrarios cuando se produce alguna modificación en un directorio determinado.
“entr” son las siglas de Event Notify Test Runner. Esta herramienta fue creada con el objetivo de realizar una rápida retroalimentación y pruebas automatizadas.
Instalación
entr
viene preinstalado en la distribución Linux. En caso de que falte, deberá 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 puede instalarla clonando el repositorio Git oficial.
git clone https://github.com/eradman/entr.git
A continuación, navegue hasta ese directorio e instale los requisitos utilizando los siguientes comandos.
./configure
make test
make install
Para ver las opciones de compilación disponibles ejecute ./configure -h
Ejemplo de comandos
Para ver las opciones y argumentos disponibles para el comando entr.
Utilice el siguiente comando.
man entr
Este comando muestra el manual de usuario del comando entr
.
NOMBRE
entr - ejecuta comandos arbitrarios cuando los archivos cambian
SINOPSIS
entr [-acdnprsz] utilidad [argumento /_ ...]
DESCRIPCIÓN
Se proporciona una lista de archivos en la entrada estándar, y la utilidad se ejecuta utilizando los argumentos suministrados
si alguno de ellos cambia. entr espera a que el proceso hijo termine antes de responder a eventos posteriores del sistema de archivos
. También se abre un TTY antes de entrar en el bucle de vigilancia con el fin de soportar utilidades interac-
tivas.
Los argumentos son los siguientes
-a Responder a todos los eventos que se produzcan mientras se ejecuta la utilidad. Sin esta opción, entr
consolida los eventos para evitar el bucle. Esta opción no tiene efecto en conjunción con
la bandera -r.
-c Borra la pantalla antes de invocar la utilidad especificada en la línea de comandos. Especifíquelo dos veces para
borrar el búfer de retroceso.
-d Rastrea los directorios de los archivos regulares proporcionados como entrada y sale si se añade un nuevo archivo.
Esta opción también permite especificar explícitamente los directorios. Si se especifica dos veces, se reconocen todas las nuevas
entradas a un directorio, de lo contrario se ig-
noran los archivos cuyos nombres comiencen por '.'.
-n Ejecutar en modo no interactivo. En este modo entr no intenta leer del TTY ni
cambiar sus propiedades.
-p Posponer la primera ejecución de la utilidad hasta que se modifique un archivo.
Página del manual entr(1) línea 1 (pulse h para obtener ayuda o q para salir)
- Para lanzar y auto-recargar un servidor MySQL cuando cualquier archivo JavaScript cambia en el directorio de trabajo. Cada vez que se guardan los cambios en el archivo,
entr
recarga 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 más detalles y ejemplos sobre el comando entr
, puede visitar su repositorio oficial en GitHub.
Palabras finales 👩💻
Espero que haya encontrado este artículo muy útil para aprender a ejecutar comandos Linux cuando cualquier archivo en un directorio dado cambia y cuando se crean nuevos archivos.
También puede interesarle aprender cómo eliminar archivos y directorios en Linux.