GNU/Linux >> Znalost Linux >  >> Linux

Průběžně rekurzivně detekujte nové soubory pomocí nástrojů inotify ve více adresářích

inotifywait (součást inotify-tools) je správný nástroj k dosažení vašeho cíle, nezáleží na tom, že se vytváří několik souborů současně, detekuje je.

Zde je ukázkový skript:

#!/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 použije tyto možnosti.

-m chcete-li donekonečna sledovat adresář, pokud tuto možnost nepoužijete, skript se ukončí, jakmile detekuje nový soubor.

-r bude monitorovat soubory rekurzivně (pokud existuje mnoho adresářů/souborů, může chvíli trvat, než zjistí nově vytvořené soubory)

-e vytvořit je možnost určit událost, která se má sledovat, a ve vašem případě by měla být vytvořit starat se o nové soubory

--format '%w%f' vytiskne soubor ve formátu /complete/path/file.name

"${MONITORDIR}" je proměnná obsahující cestu k monitorování, kterou jsme definovali dříve.

Takže v případě, že je vytvořen nový soubor, inotifywait jej detekuje a vytiskne výstup (/complete/path/file.name) do potrubí a whilepřiřadí tento výstup proměnné NEWFILE .

Uvnitř smyčky while uvidíte způsob, jak odeslat e-mail na vaši adresu pomocí utility mailx to by mělo fungovat dobře s vaším localMTA (ve vašem případě Postfixem).

Pokud chcete monitorovat několik adresářů, inotifywait to neumožňuje, ale máte dvě možnosti, vytvořte skript pro každý adresář, který chcete monitorovat, nebo vytvořte funkci uvnitř skriptu, něco takového:

#!/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" &

Použijte inotifywait, například:

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

Další informace a příklady naleznete v článku
Jak používat inotify-tools ke spouštění skriptů na událostech souborového systému.


Linux
  1. Skript pro sledování nových souborů ve složce?

  2. Používáte Inotify ke sledování přístupu k souboru?

  3. Jak rekurzivně odstranit adresáře pomocí zástupných znaků?

  1. Jak zkopírovat soubor do více adresářů pomocí příkazu gnu cp

  2. Linux najde názvy souborů s daným řetězcem rekurzivně

  3. Stahování souboru pomocí wget pomocí více připojení

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  3. echo text s novým řádkem v bash