Tengo un archivo llamado file1 que quiero en un script, cada vez que hay un cambio en él, hago algo, un pitido en realidad. ¿Cómo puedo hacer eso?
8
Tengo un archivo llamado file1 que quiero en un script, cada vez que hay un cambio en él, hago algo, un pitido en realidad. ¿Cómo puedo hacer eso?
Si ha inotify-tools
instalado (al menos ese es el nombre del paquete en Debian) cuando puede hacer algo como esto:
while inotifywait -q -e modify filename >/dev/null; do
echo "filename is changed"
# do whatever else you need to do
done
Esto espera a que ocurra el evento "modificar" en el archivo llamado "nombre de archivo". Cuando eso sucede, el inotifywait
comando emite filename MODIFY
(que descartamos enviando la salida a / dev / null) y luego termina, lo que hace que se ingrese el cuerpo del bucle.
Lea la página de manual inotifywait
para más posibilidades.
while
. También tenga en cuenta que lo que un humano considera una "modificación" no siempre funciona: esto capturará un apéndice, por ejemplo, pero no detectará un editor comovim
(el archivo observado se renombra o se intercambia con una copia de seguridad), niperl -i
(en el lugar editar) que reemplaza el archivo con uno nuevo. Una vez que cualquiera de esos ocurra,inotifywait
nunca volverá. Mirar un inodo y mirar un nombre de archivo no es lo mismo, por lo que depende del caso de uso.move_self
, capturará los cambios de nombre. Consulte la página de manual para obtener una lista completa de eventos.Sin inotifywait puedes usar este pequeño script y un trabajo cron (cada minuto más o menos):
fuente
Vino a buscar un one-liner en MacOS. Establecido en lo siguiente. Compilado y agregado esta herramienta a mi camino. Esto tomó menos de 30 segundos.
Luego, fui al directorio en el que deseaba hacer la observación. En este caso, deseaba ver un archivo de rebajas para ver los cambios, y si se modifica, emitir un
make
.Eso es.
fuente
brew install kqwait
y puede pasarle múltiples archivos comokqwait **/*
Probablemente no necesite comparar md5sum si tiene disponible la utilidad diff.
la ! niega, por ejemplo, verdadero si la declaración es falsa
La advertencia es que necesita el archivo original para comparar con diff que (imo) es lo mismo que el script md5sum está haciendo anteriormente.
fuente
diff -q
, si lodiff
soporta.-q
significa "informar si solo difieren los archivos", no cómo difieren. Entoncesdiff -q
deja de comparar el momento en que se ve una diferencia, lo que puede ser muy útil en cuanto al rendimiento. Consulte la documentación de GNU , por ejemplo. Si el punto completo de su respuesta es ser eficiente al no usarlomd5sum
, entonces no usarlodiff -q
si está disponible es derrotar ese punto.Puede probar la
entr
herramienta de línea de comandos, p. Ej.fuente
entr
necesita ser instalado o al menos ese es el caso de Ubuntu. Sin embargo, debería estar presente en la mayoría de los repositorios de distorsión.si está verificando cambios en un repositorio de git, puede usar:
fuente
a.
cp orginalfile fileneedto_be_changed
'(Necesito hacer solo una vez)si.
fuente