有没有办法从 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 脚本中围绕该函数编写一些逻辑来判断它是否未复制任何文件。
答案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]$