Заставить rsync генерировать файл исправления вместо того, чтобы копировать через файлы?

Для меня, обновляя до Snow Leopard решил проблему. Так, я думаю, что это было связано с ошибкой в OSX.

19
задан 4 September 2009 в 14:02
7 ответов

Мог бы быть лучший путь, но это могло бы работать, хотя не что эффективно:

 rsync -vrn / dest:/ > ~/file_list

Затем отредактируйте тест для удаления статистики, затем:

while read file; do
    diff $file <(ssh dest "cat $file")
done < ~/edited_file_list

Другая опция:
Вы могли бы также считать монтирование файловой системы с чем-то как sshfs/fuse и затем просто использование различным.

8
ответ дан 2 December 2019 в 20:19
  • 1
    Примечание: Я didn' t тестируют те команды ;-) –  Kyle Brandt 4 September 2009 в 14:31
  • 2
    Хорошее начало, но there' s загрузки дополнительного вывода от rsync, такие как статистика и " отправка возрастающего файла list" и т.д. –  Rory 4 September 2009 в 14:43
  • 3
    Вы могли использовать-формат =" %f" –  Kyle Brandt 4 September 2009 в 14:49
  • 4
    Если Вы используете-формат, отбрасываете v и grep-v ' пропуск нерегулярного file'... это должно получить его довольно чистый –  Kyle Brandt 4 September 2009 в 14:51

Для создают патч:

rsync -arv --only-write-batch=patch old/ new/

Для применяют его:

rsync -arv --read-diff=patch dir/

или использование автоматически сгенерировал сценарий:

./patch.sh

Источники:

2
ответ дан 2 December 2019 в 20:19

rsync не может сделать этого исходно, но если существует возможность использования унисона, можно произвести различный формат стиля из этого.

2
ответ дан 2 December 2019 в 20:19

Это не возможно исходно, потому что rsync только заботится о двоичных различиях между файлами.

Вы смогли писать сценарий его, с помощью вывода rsync. Но это был бы hackish.

Я действительно полагаю, что это исходно возможно с Унисоном все же.

1
ответ дан 2 December 2019 в 20:19

Почему не только используют что-то как разность (для текстовых файлов) или xdelta (для двоичных файлов) для генерации diffs? Почему необходимо конкретно вытащить что-то из rsync?

1
ответ дан 2 December 2019 в 20:19

rsync алгоритм работает путем сравнения двоичных блоков файла. Такая двоичная разность не предназначена, чтобы быть печатаемой. Существует команда, названная rdiff, который использует rsync алгоритм для генерации двоичной разности, но я не думаю, что для того, было бы полезно, что Вы описываете, это является наиболее часто используемым для реализации возрастающих резервных копий.

0
ответ дан 2 December 2019 в 20:19

To expand on Kyle's answer, this automates the process. Note that it is totally untested, probably pretty fragile, and may delete your computer and kill your dog.

#!/bin/bash

REMOTE=${1?Missing Remote Path}
LOCAL=${2?Missing Local Path}

# Trim trailing slash since we'll be adding it as a separator later
REMOTE=${REMOTE%/}
LOCAL=${LOCAL%/}

#Break it down
RHOST=${REMOTE%:*}
RPATH=${REMOTE#*:}

while read FILE; do
    diff -u ${LOCAL}/${FILE} <(ssh $RHOST "cat ${RPATH}/${FILE}")
done < <(rsync -vrn $REMOTE/ $LOCAL/ | sed '1d;/^$/q')
1
ответ дан 2 December 2019 в 20:19

Теги

Похожие вопросы