使用 rsync 测试目录是否同步

使用 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

$ 回显 $?

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

$ 回显 $?

0

答案1

您可以使用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。

答案2

Rsync 没有不同的退出代码,当它运行复制时和不复制任何内容时都是如此。退出代码仅用于导致复制出现问题的故障。您必须在 bash 脚本中围绕该函数编写一些逻辑来判断它是否未复制任何文件。

http://wpkg.org/Rsync_exit_codes

答案3

以前从未这样做过,但如果您的目录不是太大,它可能会起作用。

创建一个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

答案4

运行rsync -n,您将获得不同步的文件列表:

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

相关内容