2010-11-19 25 views
5
Bir dosya xyz.txt herhangi bir değişiklik izlemek ve bir değişiklik olduğunda bana tüm dosyayı e-posta istediğiniz

için bir dosya izleyin. Bunun için Tek Liner (veya birkaç satır kabuk betiği) var mı?değişim

Güncelleme: Şimdi birileri bir kabuk veya 1 komuta bu iki satır bağlamak nasıl gösterebiliriz eğer

# Check if my.cnf has been changed in the last 24 hours 
# if yes, as in the following case, simply send the file 
# if it has not been changed in the last 24 hours, do nothing. 

# find /etc/ -name my.cnf -mtime 0 
/etc/my.cnf 

# cat /etc/my.cnf | mail [email protected] 

.

cevap

4

bu Deneyin:

mail için -E seçenek olabilecek şekilde (boş organları ile mesaj göndermesini engeller
find /etc/ -name my.cnf -mtime 0 -exec sh -c 'cat {} | mail -E -s "file changed" [email protected]' \; 

eğer find döner bir şey ve cat çıkışları şey

+0

-E seçeneği için posta komutunun benim sürümü için kullanılabilir olması için görünmüyor – shantanuo

+1

@shantanuo: İşte çıkış boş olmayan sadece boru [yaklaşık Süper Kullanıcı üzerinde bir sorudur ] (http://superuser.com/q/210054/310). –

6

Bir dosya veya dizin izlemek ve değişiklikleri bildirebilirsiniz inotify içine bakmak gerekir.

+0

+1 bağlantısı – GuruM

18

Sen inotifywait kullanabilirsiniz. Bir dosyadaki değişiklikleri bekler ve ardından bir komutu (örneğin, dosyanızda msmtp gibi bir şey) yürütür.

-2
#!/bin/ksh 

ls -lt /usr/tip30/prtfile/asb270.prt|awk '{print $6$7$8}'|awk -F: '{print $1$2}' 
> /tmp/lastupdated.temp 
read input_pid < /tmp/lastupdated.temp 
echo "$input_pid" 

while [ "$input_pid" -eq "`ls -lt /usr/tip30/prtfile/asb270.prt | awk '{print $6 
$7$8}'|awk -F: '{print $1$2}'`" ]; do 
    echo "file has not changed " 
    sleep 30 
done 
echo "file changed `ls -lt /tmp/lastupdated.temp`" 
rm /tmp/lastupdated.temp 
+1

Lütfen kodunuzu biçimlendirin/sorunun neden bu sorunu çözdüğünü açıklayın. –

1
.

Inotify-hookable bu amaçla kullanımı oldukça kolay olan bir perl script. Örneğin,

Dosya için

-f komutunu

çalıştırmak için ben çok uzak bir bilgisayarda bir dosya izlerken vardı -c izlemek için, ama bitmiş Inotify-hookable izlenen dosya olmanın öncesinde silindi ne zaman güncellenmiş.

Debian'dan yükledim. CPAN linki: https://metacpan.org/pod/App::Inotify::Hookable