2010-11-19 23 views
5

Quiero ver cualquier cambio en un archivo xyz.txt y enviarme un correo electrónico con el archivo completo cada vez que haya un cambio. ¿Hay One Liner (o unas pocas líneas de script de shell) para esto?Mirar un archivo para el cambio

Actualización:

# 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] 

Ahora bien, si alguien puede mostrar cómo enlazar estas dos líneas en un script de shell o en 1 mando.

Respuesta

4

seguirlo:

find /etc/ -name my.cnf -mtime 0 -exec sh -c 'cat {} | mail -E -s "file changed" [email protected]' \; 

La opción -E-mail evita que el envío de mensajes con los cuerpos vacíos (como sería el caso si find no devuelve nada y cat salidas nada

+0

-E opción de enlace no parece estar disponible para mi versión del comando de correo – shantanuo

+1

@shantanuo: Aquí hay una pregunta sobre el Super usuario acerca [tuberías sólo cuando la salida no está vacía ] (http://superuser.com/q/210054/310). –

6

Debería mirar en inotify que puede mirar un archivo o directorio y reportar cambios.

+0

1 para la – GuruM

18

Puede usar inotifywait. Espera cambios en un archivo y luego ejecuta un comando (por ejemplo, algo como msmtp en su caso).

-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

Formatee su código/proporcione alguna explicación de por qué esto resuelve el problema en cuestión. –

1
.

inotify-hookable es un script de Perl que es bastante fácil de usar para este propósito. Por ejemplo,

inotify-hookable -f /path/to/file -c "latexmk -pdf /path/to/file" & 
inotify-hookable -f /path/to/file -c "cp /path/to/file /path/to/copy" & 

-f para el archivo para ver -c para el comando a ejecutar

tuviera que ver un archivo en un equipo remoto también, pero inotify-enganchable terminada cuando el archivo fue borrado visto antes de ser actualizado.

Lo instalé de Debian. enlace CPAN: https://metacpan.org/pod/App::Inotify::Hookable

Cuestiones relacionadas