我发现“rsync --link-dest”的行为会根据我创建比较目录的方式而有所不同。如果比较目录是通过“cp”命令创建的,“rsync --link-desk”会正确执行硬链接。但是,如果比较目录的内容是手动创建的,即使内容相同,相同的 rsync 命令也不会执行硬链接,而是复制。以下是一个例子:
$ mkdir /tmp/src
$ echo "test" > /tmp/src/file
$ cp -a /tmp/src /tmp/dest1
$ rsync -ai --link-dest=/tmp/dest1 /tmp/src/ /tmp/dest2
$ ls -l /tmp/dest2/
total 4
-rw-rw-r-- 2 user user 5 Apr 7 23:24 file
在上面的例子中,“rsync --link-dest”按预期工作。如果我们手动创建比较目录“/tmp/dest1”的内容,则同一命令不会执行硬链接:
$ rm -rf /tmp/src /tmp/dest1 /tmp/dest2
$ mkdir /tmp/src
$ echo "test" > /tmp/src/file
$ cat /tmp/src/file > /tmp/dest1/file
$ md5sum /tmp/src/file /tmp/dest1/file
d8e8fca2dc0f896fd7cb4cb0031ba249 /tmp/src/file
d8e8fca2dc0f896fd7cb4cb0031ba249 /tmp/dest1/file
$ rsync -ai --link-dest=/tmp/dest1 /tmp/src/ /tmp/dest2
cd..t...... ./
>f..t...... file
$ ls -l /tmp/dest2
total 4
-rw-rw-r-- 1 user user 5 Apr 7 23:31 file
这次“rsync --link-dest”命令将源目录中的文件复制到目标目录,而不是硬链接它,甚至源目录和比较目录之间的内容和目录布局都是相同的。
那么“cp”和手动创建“rsync --link-dest”命令的内容有什么不同?我正在使用 rsync 3.1.2,在 Ubuntu 18.10 和 MacOS 10.14.3 上都可以观察到相同的行为。谢谢。