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