teste quando os diretórios estão em sincronia usando o rsync

1

Existe alguma maneira de saber de um script bash quando um comando rsync não faz o download de nada (também conhecido como a pasta está em sincronia) ?, eu tentei usar o código de saída, mas só é diferente quando ocorre um erro. / p>

Exemplo de download do rsync apenas dos arquivos que não estão sincronizados:

$ rsync -av --progress humbo @hkremote: / home / humbo / dumps / *. gz.

receiving file list ...
9 files to consider
_dump_7.gz
    35927279 100%    1.19MB/s    0:00:28 (xfer#1, to-check=1/9)
_dump_8.gz
    39387704 100%    1.17MB/s    0:00:32 (xfer#2, to-check=0/9)

sent 64 bytes  received 75324472 bytes  1205192.58 bytes/sec
total size is 354448073  speedup is 4.71

$ echo $?

0

Arquivos sincronizados:

$ rsync -av --progress humbo @hkremote: / home / humbo / dumps / *. gz.

receiving file list ...
9 files to consider

sent 20 bytes  received 205 bytes  90.00 bytes/sec
total size is 354448073  speedup is 1575324.77

$ echo $?

0
    
por rkheik 24.06.2015 / 10:42

5 respostas

2

Você pode usar rsync --stats , em seguida, usar grep "Number of files transferred" e, em seguida, imprimir este stat com awk , desta forma:

rsync -av --stats --progress humbo@hkremote:/home/humbo/dumps/*.gz . | grep 'Number of files transferred' | awk -F ": " '{print $2}'

Este resultado é 0 quando nada é transferido.

    
por 25.11.2015 / 03:18
1

O rsync não possui um código de saída diferente para quando executa uma cópia, mas não copia nada. Os códigos de saída são apenas para falhas, resultando em problemas com cópias. Você teria que escrever alguma lógica em torno da função no script bash para dizer se não copiou nenhum arquivo.

link

    
por 24.06.2015 / 21:12
1

Nunca fiz isso antes, mas pode funcionar se seus diretórios não forem muito grandes.

Crie um md5sum antes de iniciar seu rsync e compare com o md5sum depois que você terminar. Algo parecido com isto:

#!/bin/bash
md5sum=$(ssh humbo@hkremote tar -c /home/humbo/dumps|md5sum)
.
.
# The rest of your script goes here
.
.
md5sum_after_rsync=$(ssh humbo@hkremote tar -c /home/humbo/dumps|md5sum)
if test $md5sum == $md5sum_after_rsync
then
    echo "nothing has changed"
else
    echo "something has changed"
fi
    
por 24.06.2015 / 21:45
1

Você pode usar rsync -i . Saída vazia significa que não há alterações.

Ou rsync --stats e analise a saída ...

    
por 24.06.2015 / 22:13
0

executar rsync -n , você obterá uma lista de arquivos que estão fora de sincronia:

[alexus@wcmisdlin02 Desktop]$ rsync --help | grep dry-run
 -n, --dry-run               perform a trial run with no changes made
[alexus@wcmisdlin02 Desktop]$ 
    
por 24.06.2015 / 22:06