sincroniza arquivos recursivamente entre duas pastas onde os arquivos têm menos de 24 horas

7

Eu quero encontrar todos os arquivos em um diretório que esteja dentro de 24 horas e depois rsync aqueles arquivos com outro servidor.

Existem alguns arquivos antigos que eu não quero transferir, no entanto, se esses arquivos antigos forem atualizados, eu o faço.

Eu estava pensando em escrever um script com: find e o parâmetro -ctime e redirecionar essa saída para um arquivo, mas não sei como fazer com que o rsync use efetivamente isso, ou se há uma maneira melhor de transferir um conjunto de arquivos que foram alterados nas últimas 24 horas.

Esse processo precisa ser executado com muita frequência, por isso não estou procurando algo muito ineficiente. (como usar ftp e enviar tudo a cada vez).

Qualquer ideia apreciada.

    
por Quaternion 28.01.2012 / 02:55

2 respostas

7

Tente isto:

cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>

Ele usa Substituição do Processo <( ) para substituir o comando find por um fifo nomeado e fornece o nome do fifo para rsync para ler o que incluir na sincronização.

Atualizar

À luz da resposta de Kyle, parece que --files-from é mais apropriado que --include-from ; embora ambos funcionem. Resposta atualizada

    
por 28.01.2012 / 03:15
3
#!/bin/sh
thefiles=/tmp/files.$$
LOCALDIR=/path/to/local/dir
REMOTEDIR=/path/to/remote/dir
REMOTEHOST=remote.host
changetime=24h

cd $LOCALDIR || { echo cd failed 1>&2; exit 1; }

trap 'rm -f $thefiles' 0

find . -type f -ctime -$changetime -print > $thefiles
rsync -v -n --archive --files-from=$thefiles . $REMOTEHOST:$REMOTEDIR

Esse script é executado em $ LOCALDIR, colocando os resultados em um arquivo e, em seguida, diz ao rsync para usar o conteúdo do arquivo como uma lista de arquivos a serem transferidos para o diretório $ REMOTEDIR no host $ REMOTEHOST. O script chdir está em $ LOCALDIR porque o comando rsync precisa de caminhos relativos, não absolutos. Eu deixei -v -n nos argumentos do rsync para que você possa ver o que isso faz sem copiar nada; remover -n quando estiver satisfeito, o script faz o que você quer.

    
por 28.01.2012 / 07:46