GNU/Linux >> Linux Esercitazione >  >> Linux

Rileva continuamente nuovi file con inotify-tools all'interno di più directory in modo ricorsivo

inotifywait (parte di inotify-tools) è lo strumento giusto per raggiungere il tuo obiettivo, non importa se vengono creati più file contemporaneamente, li rileverà.

Ecco uno script di esempio:

#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done

inotifywait utilizzerà queste opzioni.

-m per monitorare la directory a tempo indeterminato, se non si utilizza questa opzione, una volta rilevato un nuovo file lo script terminerà.

-r monitorerà i file in modo ricorsivo (se ci sono molte cartelle/file potrebbe volerci un po' per rilevare i nuovi file creati)

-e crea è l'opzione per specificare l'evento da monitorare e nel tuo caso dovrebbe essere create per occuparsi dei nuovi file

--format '%w%f' stamperà il file nel formato /completo/percorso/nome.file

"${MONITORDIR}" è la variabile contenente il percorso da monitorare che abbiamo definito in precedenza.

Quindi, nel caso in cui venga creato un nuovo file, inotifywait lo rileverà e stamperà l'output (/complete/path/file.name) alla pipe e while assegnerà quell'output alla variabile NEWFILE .

All'interno del ciclo while vedrai un modo per inviare una mail al tuo indirizzo utilizzando l'utility mailx dovrebbe funzionare bene con il tuo MTA locale (nel tuo caso, Postfix).

Se vuoi monitorare più directory, inotifywait non lo consente ma hai due opzioni, crea uno script per ogni directory da monitorare o crea una funzione all'interno dello script, qualcosa del genere:

#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"    

monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
        echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "[email protected]"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &

Usa inotifywait, ad esempio:

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

Per ulteriori informazioni ed esempi vedere l'articolo
Come utilizzare inotify-tools per attivare script sugli eventi del filesystem.


Linux
  1. Script per monitorare la cartella per i nuovi file?

  2. Come eliminare ricorsivamente directory con caratteri jolly?

  3. echo testo con nuova riga in bash

  4. Monitora continuamente i tronchi con la coda che occasionalmente vengono ruotati

  5. Come scansionare più directory con clamav

Come modificare le autorizzazioni dei file in modo ricorsivo con chmod in Linux

Come copiare un file in più directory in Linux

Copia un file in più directory dalla riga di comando su Linux

Come creare nuovi utenti in OpenShift con htpasswd e OAuth

Come copiare un file con un comando in più directory su Linux

Come copiare file con estensione di file specifica in modo ricorsivo