Есть ли способ узнать из сценария 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, чтобы определить, не копировал ли он какие-либо файлы.
Ты можешь использовать 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]$