У меня большой удаленный каталог 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
не привязан жестко.
Нашел решение: -c
switch запрашивает сравнение контрольной суммы для каждого файла. Это игнорирует последние измененные даты, и 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/
указывает на то, что они жестко связаны.