rsync 同步太多文件

rsync 同步太多文件

我有以下目录结构:

/tmp1
  \_ file1.txt
  \_ file2.txt

/tmp2
  \_ file1.txt
  \_ file2.txt
  \_ file3.txt
/changes

使用 rsync 的 --compare-dest 选项,我想将所有不在 /tmp1 中但在 /tmp2 中的文件同步到 /changes。/tmp2 中与 /tmp1 不同的已修改文件也应同步到 /changes。

当我执行以下命令时:

rsync -acvu --compare-dest=/tmp1/ /tmp2/ changes

file3.txt 会保存更改。但 file1.txt 也会保存更改,尽管两个目录中文件的 md5 总和相等!

我是否遗漏了 rsync 的一些参数?提前致谢!

更新:

我发现不应同步的文件的文件权限为 -rw-rw-r-- 其他文件的权限为 -rwxrwxr-x。我找不到与 rsync 相关的此行为。

两个目录上的“ls -la”输出:

# ls -la /tmp1
-rw-rw-r-- 1 1001 1001 4 Dec 31 15:00 file1.txt
-rwxrwxr-x 1 1001 1001 6 Dec 31 15:00 file2.txt

# ls -la /tmp2
-rw-rw-r-- 1 1001 1001 4 Dec 31 19:31 file1.txt
-rwxrwxr-x 1 1001 1001 6 Dec 31 15:00 file2.txt
-rwxrwxr-x 1 1001 1001 2 Dec 31 15:00 file3.txt

# ls -la /changes
-rw-rw-r-- 1 1001 1001 4 Dec 31 19:31 file1.txt
-rwxrwxr-x 1 1001 1001 2 Dec 31 15:00 file3.txt

两个目录中的file1.txt的md5sum相等!

答案1

man注释页面rsync

从 2.6.4 版本开始,可以提供多个 --compare-dest 目录,这将导致 rsync 按照指定的顺序搜索列表以进行精确匹配。 如果发现仅属性不同的匹配项,则会制作本地副本并更新属性。 如果未找到匹配项,则会选择其中一个 DIR 中的基础文件来尝试加快传输速度。

正如我所读到的,这意味着如果它发现一个文件,除了源文件和目标文件的属性之外,其他都相同,则不会从远程源服务器传输该文件;相反,它rsync会知道文件是相同的,因此会changes/当地的存储,但将修改时间设置为远程实例的较新的时间戳。

为了确认这一点,请查看以下输出:

[madhatta@risby test]$ ls -la tmp1
total 36
drwxrwxr-x. 2 madhatta madhatta  4096 Feb  3 10:50 .
drwxrwxr-x. 4 madhatta madhatta  4096 Feb  3 11:01 ..
-rw-rw-r--. 1 madhatta madhatta 23150 Feb  3 10:59 file1
-rw-rw-r--. 1 madhatta madhatta   224 Feb  3 10:50 file2
[madhatta@risby test]$ ls -la tmp2
total 36
drwxrwxr-x. 2 madhatta madhatta  4096 Feb  3 10:51 .
drwxrwxr-x. 4 madhatta madhatta  4096 Feb  3 11:01 ..
-rw-rw-r--. 1 madhatta madhatta 23150 Feb  3 11:00 file1
-rw-rw-r--. 1 madhatta madhatta   224 Feb  3 10:50 file2
-rw-rw-r--. 1 madhatta madhatta     0 Feb  3 10:51 file3.txt
[madhatta@risby test]$ rsync -acvu --compare-dest=/home/madhatta/tmp/test/tmp1 tmp2/ changes
sending incremental file list
created directory changes
./
file1
file3.txt

sent 215 bytes  received 71 bytes  572.00 bytes/sec
total size is 23,374  speedup is 81.73

虽然它报告file1已被复制,但收到的数据量(70多个字节)根本不足以进行复制file1(23kB),无论是否压缩。

相关内容