inotifywait (część narzędzi inotify ) jest właściwym narzędziem do osiągnięcia celu, nie ma znaczenia, że kilka plików jest tworzonych w tym samym czasie, wykrywa je.
Oto przykładowy skrypt:
#!/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" "yourmail@addresshere.tld"
done
inotifywait użyje tych opcji.
-m do monitorowania katalogu w nieskończoność, jeśli nie użyjesz tej opcji, po wykryciu nowego pliku skrypt się zakończy.
-r będzie rekurencyjnie monitorować pliki (jeśli jest dużo katalogów / plików, wykrycie nowo utworzonych plików może chwilę potrwać)
-e create to opcja określająca zdarzenie, które ma być monitorowane, aw twoim przypadku powinno być utworzone, aby dbać o nowe pliki
--format '% w% f' wydrukuje plik w formacie /complete/path/file.name
„$ {MONITORDIR}” to zmienna zawierająca ścieżkę monitorowania, którą zdefiniowaliśmy wcześniej.
W przypadku utworzenia nowego pliku, inotifywait wykryje go i wydrukuje dane wyjściowe (/complete/path/file.name) do potoku i jednocześnie przypisze je do zmiennej NEWFILE .
Wewnątrz pętli while zobaczysz sposób wysłania wiadomości na twój adres za pomocą narzędzia mailx, które powinno działać poprawnie z lokalnym MTA (w twoim przypadku Postfix).
Jeśli chcesz monitorować kilka katalogów, inotifywait nie pozwala na to, ale masz dwie opcje, utwórz skrypt dla każdego katalogu do monitorowania lub utwórz funkcję w skrypcie, coś takiego:
#!/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" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &