Precisa verificar uma árvore de diretórios para alterações a cada 10 segundos e executar um script se ele for alterado

3

Eu tenho um diretório que tem muitas pastas com código dentro dele, e eu preciso executar um script para rsync mudar para alguns outros servidores. Eu tenho esse script escrito e funcionando bem, mas não consigo encontrar algo que irá verificar a árvore de diretórios para alterações. Eu tentei stat, mas que apenas verificar uma pasta para baixo, não recursivamente (tanto quanto eu poderia descobrir). Alguém sabe de um comando ou programa que eu poderia instalar para fazer isso? Eu uso o Ubuntu 10.04. Desde já, obrigado.

    
por Mike 20.07.2010 / 18:47

6 respostas

3

inotifywait fará verificações recursivas.

Está nos repositórios do Ubuntu .

    
por 20.07.2010 / 19:58
3

A ferramenta perfeita para este trabalho é usar o serviço de kernel inotify. Você pode usá-los em um shell script com o pacote inotify-tools (debian / ubuntu). Você pode ler mais e ver alguns exemplos na página do projeto . Há até um exemplo na página que parece fazer algo próximo do que você deseja:

#!/bin/sh

# get the current path
CURPATH='pwd'

inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \
-e close_write /tmp/test | while read date time dir file; do

       FILECHANGE=${dir}${file}
       # convert absolute path to relative
       FILECHANGEREL='echo "$FILECHANGE" | sed 's_'$CURPATH'/__''

       rsync --progress --relative -vrae 'ssh -p 22'  $FILECHANGEREL [email protected]:/backup/root/dir && \
       echo "At ${time} on ${date}, file $FILECHANGE was backed up via rsync"
done
    
por 20.07.2010 / 20:05
2

O rsync verificará a árvore de diretórios em busca de mudanças e copiará apenas os arquivos alterados se você der a ela um diretório como fonte.

    
por 20.07.2010 / 19:14
1

Dê uma olhada em inotify . Eu resolvi um problema semelhante há algum tempo com dnotify ou sgi_fam (não me lembro quais), mas inotify parece ter superado os dois.

    
por 20.07.2010 / 19:31
1

Alguém já inventou essa roda. É chamado de lsyncd e aparentemente é um mashup de rsync e inotify. Eu não usei isso sozinho, porque as limitações do inotify são tais que ele não é dimensionado para diretórios realmente grandes (e profundos). Estou esperando até que eles reimplementem diretamente usando fsnotify .

Há também PIrsyncD que parece fazer a mesma coisa.

    
por 21.07.2010 / 01:12
0

use find

find /path -mmin 1

Isso irá verificar se um arquivo ou diretório foi modificado há 1 min, olhe para a página man para mais opções.

    
por 20.07.2010 / 18:58