Rsync: сохранить файл назначения без изменений, если такая же контрольная сумма - PullRequest
0 голосов
/ 14 мая 2018

Допустим, у нас есть следующие файлы:

 ~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
 -rw-r--r-- 1 david david 81 14. Mai 07:58 harp_netlify/BingSiteAuth.xml
 -rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

Содержимое обоих файлов идентично:

~/Homepage $ cmp harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml; echo $?
0

Следовательно, Я хочу, чтобы harp_netlify/BingSiteAuth.xml не изменялось из-за идентичного содержимого. Однако с помощью следующей команды метка времени файла на стороне назначения обновляется:

~/Homepage $ rsync -cav --delete harp_output/ harp_netlify/

Результат таков:

~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
-rw-r--r-- 1 david david 81 14. Mai <b>08:10</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

Но я хочу иметь это:

~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
-rw-r--r-- 1 david david 81 14. Mai <b>07:58</b> harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

Но, если контрольная сумма отличается, rsync должен обновить временную метку.

1 Ответ

0 голосов
/ 14 мая 2018

Аргументы, которые вы передаете rsync: -cav;проблема, с которой вы столкнулись, - это «a», которое расширяется до -rlptgoD, как описано в справочной странице , в результате чего вы получаете окончательный список аргументов -crlptgoDv, переданный rsync.

Хитростьчасть этого - p, t, g и o, которые сохраняют права доступа (p), времена модификации (t) (что и является причиной изменения синхронизации в вашем текущем примере),группа (g) и владелец (o).Если я правильно понимаю ваш вопрос, то вы хотите:

rsync -crlDv --delete harp_output/ harp_netlify/

В этом мы сохраняем «c» и «v» из вашей текущей команды и используем «r» (для рекурсивной синхронизации)), «l» для сохранения символических ссылок и «D» для сохранения устройств и специальных файлов. Если все, что вам нужно, это рекурсивная синхронизация на основе контрольных сумм, и вам не нужны ссылки или специальные файлы, тогда «r»достаточно, то есть:

rsync -crv --delete harp_output/ harp_netlify/
...