inotifywait ( inotify araçlarının bir parçası ) hedefinize ulaşmak için doğru araçtır, aynı anda birkaç dosyanın oluşturulması önemli değildir, onları algılar.
İşte örnek bir komut dosyası:
#!/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 bu seçenekleri kullanacaktır.
-m dir süresiz izlemek için, bu seçeneği kullanmazsanız, yeni bir dosya algıladıktan sonra komut dosyası sona erer.
-r dosyaları özyinelemeli olarak izler (çok sayıda dirs / dosya varsa, yeni oluşturulan dosyaları algılamak biraz zaman alabilir)
-e create , izlenecek olayı belirtme seçeneğidir ve durumunuzda yeni dosyalara dikkat etmek için yaratılması gerekir
--format '% w% f' dosyayı /complete/path/file.name biçiminde yazdırır
"$ {MONITORDIR}" , daha önce tanımladığımız izleme yolunu içeren değişkendir.
Böylece yeni bir dosya oluşturulması durumunda inotifywait dosyayı algılar ve çıktıyı (/complete/path/file.name) boruya yazdırır ve bu çıktıyı NEWFILE değişkenine atar .
While döngüsünün içinde, yerel MTA'nızla ( çalışmanız durumunda Postfix) iyi çalışması gereken mailx yardımcı programını kullanarak adresinize posta göndermenin bir yolunu göreceksiniz .
Birkaç dizini izlemek istiyorsanız, inotifywait buna izin vermez, ancak iki seçeneğiniz vardır, her dir için kodun içinde izlemek veya bir işlev oluşturmak için bir komut dosyası oluşturun:
#!/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" &