我有一个大型远程目录A
和本地目录B
,它们的内容几乎相同,尽管许多修改时间可能因复制文件等而发生变化。我想创建一个C
与 内容相同的本地目录A
,只要内容相同就硬链接到 中的文件B
。我不关心修改时间是否相同。
这可能吗rsync
?
对于测试用例,我有以下本地设置(我假设A
在远程服务器上时行为不会改变):
[Compputer:/tmp] % cat A/a B/a
foo
foo
[Compputer:/tmp] % rsync -rIv --link-dest=$PWD/B/ /tmp/A/ /tmp/C
building file list ... done
created directory /tmp/C
./
a
b
sent 169 bytes received 71 bytes 480.00 bytes/sec
total size is 8 speedup is 0.03
[Compputer:/tmp] % ls -lT A B C
A:
total 16
-rw-r--r-- 1 ken wheel 4 May 28 00:01:15 2016 a
-rw-r--r-- 1 ken wheel 4 May 28 00:01:22 2016 b
B:
total 8
-rw-r--r-- 1 ken wheel 4 May 28 00:01:34 2016 a
C:
total 16
-rw-r--r-- 1 ken wheel 4 May 28 20:46:31 2016 a
-rw-r--r-- 1 ken wheel 4 May 28 20:46:31 2016 b
请注意,这a
不是硬链接。
答案1
找到了一个解决方案:-c
交换机请求对每个文件进行校验和比较。这样可以忽略上次修改日期,并且rsync
(通常)可以更好地检测相同的文件(代价是读取每个文件,但仍然不需要通过网络传输)。
[Compputer:/tmp] % rsync -rcv --link-dest=$PWD/B/ A/ C
building file list ... done
created directory C
./
b
sent 150 bytes received 48 bytes 396.00 bytes/sec
total size is 8 speedup is 0.04
[Compputer:/tmp] % ls -l A B C
A:
total 16
-rw-r--r-- 1 ken wheel 4 May 28 00:01 a
-rw-r--r-- 1 ken wheel 4 May 28 00:01 b
B:
total 8
-rw-r--r-- 2 ken wheel 4 May 28 00:01 a
C:
total 16
-rw-r--r-- 2 ken wheel 4 May 28 00:01 a
-rw-r--r-- 1 ken wheel 4 May 30 21:33 b
2
文件前面a
的B/
和C/
表示它们是硬链接的。