He visto esta respuesta .
Debería considerar usar inotifywait, como ejemplo:
inotifywait -m /path -e create -e moved_to | while read path action file; do echo "The file '$file' appeared in directory '$path' via '$action'" # do something with the file done
Mi pregunta es que, el script anterior observa un directorio para la creación de archivos de cualquier tipo, pero ¿cómo modifico el inotifywaitcomando para informar solo cuando se crea un archivo de cierto tipo / extensión (o se mueve al directorio)? informar cuando .xmlse crea cualquier archivo.
Lo que intenté:
Ejecuté el inotifywait --helpcomando y leí las opciones de la línea de comando. Tiene --exclude <pattern>y --excludei <pattern>comandos para EXCLUIR archivos de ciertos tipos (mediante el uso de regEx), pero necesito una forma de INCLUIR solo los archivos de cierto tipo / extensión.

patharriba probablemente no sea el mejor nombre de variable si quieres jugar con esto primero en un shell. Si lo usa, no podrá usar comandos y todo, ya que esto básicamente ha anulado el estándarPATH. Por lo tanto, recomiendo usar un nombre var alternativo, como en sufpathlugar. es decirwhile read fpath action file, cualquier comando estándar generalmente disponible desde su shell seguirá siéndolo.Respuestas:
Tenga en cuenta que este es un código no probado ya que no tengo acceso en
inotifyeste momento. Pero algo similar a esto debería funcionar:fuente
incron(espero que no).inotify, ya sea connohupo empezar con el servicio systemd una costumbre. Muy a menudo este último.Use un doble negativo:
Esto solo incluirá archivos javascript
fuente
inotifywaitque genere una gran salida para todos los archivos y luego los filtre (como en la otra respuesta). No lo he intentado, pero supongo que funcionaría un poco más rápido.--excludeentrada para ver los.extarchivos. ¿Esto se ejecuta solo una vez o en un bucle for?inotifywait -m --exclude "[^.][^e][^x][^t]$" /home/jonas/Skrivbord/test -e create -e moved_to | while read path action file; do echo "The file '$file' appeared in directory '$path' via '$action'" doneEstoy seguro de que la expresión regular se puede optimizar, pero este bebé funciona :)Mientras que el enfoque doble negativo de la respuesta anterior es una buena idea, ya que (como señaló TMG) realmente cambia el trabajo de filtrado
inotifywait, no es correcto.Por ejemplo, si un archivo termina
as, no coincidirá[^j][^s]$porque la letra finalsno coincide[^s], por lo tanto, no se excluirá.En términos booleanos, si
Ses la declaración:y
Jes la declaración:entonces el valor del
--excludeparámetro debería igualar semánticamente a lonot(J and S)que, según las leyes de De Morgan, esnot(J) or not(S).Otro problema potencial es que
zsh, en ,$pathes una variable incorporada que representa el equivalente de la matriz$PATH, por lo que lawhile read path ...línea se desordenará completamente$PATHy hará que todo se vuelva ejecutable desde el shell.Por lo tanto, el enfoque correcto es:
Tenga en cuenta lo
.que se necesita después[^j]para asegurarse de que la coincidencia se aplique en la penúltima posición, y también que el|carácter (que representa el OR booleano mencionado anteriormente) no se debe escapar aquí porque--excludetoma expresiones regulares extendidas POSIX.fuente