Назад | Перейти на главную страницу

проверить синхронизацию каталогов с помощью rsync

Есть ли способ узнать из сценария bash, когда команда rsync ничего не загружает (то есть папка синхронизирована)? Я пробовал использовать код выхода, но отличается только при возникновении ошибки.

Пример загрузки rsync только несинхронизированных файлов:

$ 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

Файлы в синхронизации:

$ 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

Ты можешь использовать rsync --stats тогда используйте grep "Number of files transferred" а затем распечатайте эту статистику с помощью awk, в этом случае:

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

Этот результат равен 0, если ничего не передается.

Никогда не делал этого раньше, но это может сработать, если ваши каталоги не слишком большие.

Создатьmd5sum прежде чем вы начнете rsync и сравните с md5sum после того, как вы закончили. Что-то вроде этого:

#!/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

Rsync не имеет кода выхода, который отличается от того, когда он запускает копию, и ничего не копирует. Коды выхода предназначены только для сбоев, приводящих к проблемам с копиями. Вам нужно будет написать некоторую логику для функции в сценарии bash, чтобы определить, не копировал ли он какие-либо файлы.

http://wpkg.org/Rsync_exit_codes

Ты можешь использовать rsync -i. Пустой вывод означает отсутствие изменений.

Или rsync --stats и проанализируем вывод ...

бегать rsync -n, вы получите список файлов, которые не синхронизированы:

[alexus@wcmisdlin02 Desktop]$ rsync --help | grep dry-run
 -n, --dry-run               perform a trial run with no changes made
[alexus@wcmisdlin02 Desktop]$