rsync可以在同步之前验证内容

时间:2011-10-12 19:21:01

标签: linux file checksum rsync

可以配置Rsync以在同步文件之前验证文件的内容。我听说过校验和,但我知道校验和只是抽样。我想仅在内容被更改而不是时间戳的情况下传输文件,是否有办法在任何rsync模式下执行此操作。 在我的场景中,假设每周都会创建文件sample.text,我只想在更改sample.text的内容时将其与远程服务器同步,因为它是每周创建的,时间戳会明显改变。但我希望仅在内容更改时进行转移。

3 个答案:

答案 0 :(得分:29)

是:

$ man rsync | grep "\--checksum"
    -c, --checksum              skip based on checksum, not mod-time & size

Rsync相当复杂。我建议使用手册页和测试数据进行实验,然后再将其用于任何远程重要的事情。

大多数情况下,人们使用rsync -ac source dest

$ man rsync | grep "\--archive"
 -a, --archive               archive mode; same as -rlptgoD (no -H)

-rlptgoD垃圾意味着:递归r),复制符号链接作为符号链接l),保留权限p),保留时间t),保留群组g),< em>保留所有者(o),保留设备文件D,仅限超级用户),保留特殊文件(也是D)的一部分。

-c--checksum正是您所寻找的(基于校验和跳过,而非模态时间和尺寸)。您认为rsync仅对mtime和size进行采样是错误的。

答案 1 :(得分:9)

请参阅rsync手册页上的--checksum选项。

此外,如果您确定更改内容也意味着更改大小,--size-only选项将是更快的选择。

答案 2 :(得分:0)

Example:

#!/bin/bash
echo > diff.txt
rsync -rvcn --delete /source/ /destination/ > diff.txt
second_row=$(sed -n '2p' diff.txt)
if [ "$second_row" = "" ]; then
    echo there was no change
else 
    echo there was change   
fi