Отримати rsync для створення файлу виправлення замість копіювання між файлами?


19

Я копіюю багато файлів, які змінилися з одного сервера на інший за допомогою rsync. Я знаю, що можу використовувати -nпараметр для сухого запуску, тому я бачу, які файли були змінені. Однак чи можна отримати rsync для друку різного змісту файлу, який змінився? Я хотів би побачити, що відбувається, перш ніж зробити копію? Щось я можу зберегти у файл і застосувати з diff (1) пізніше?

Відповіді:


8

Можливо, буде і кращий спосіб, але це може працювати, хоч і не так ефективно:

 rsync -vrn / dest:/ > ~/file_list

Потім відредагуйте тест, щоб видалити статистику, а потім:

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

Інший варіант:
Ви також можете розглянути можливість встановлення файлової системи чимось на зразок sshfs / fuse, а потім просто використовувати diff.


Примітка: я не перевіряв ці команди ;-)
Кайл Брандт

Хороший старт, але є багато додаткових результатів з rsync, таких як статистика та "надсилання інкрементального списку файлів" тощо
Rory

Ви можете використовувати --out-format = "% f"
Кайл Брандт,

Якщо ви використовуєте формат у форматі, скиньте v і grep -v "пропуск нестандартного файлу" ... Це повинно вийти досить чистим
Kyle Brandt

Просто перевіряємо, чи випадково є новий / кращий метод, щоб rsync --diffдва роки пізніше ...
Дзвінок Ø



1

Власне це неможливо, оскільки rsync піклується лише про бінарні відмінності між файлами.

Можливо, ви зможете його скриптувати, використовуючи вихід rsync. Але це було б хакітом.

Я вірю, що це споконвічно можливо з Unison .


1
Моє, що ви мали на увазі під хакісом? :-)
Кайл Брандт

Абсолютно, Кайл: D
Ден Карлі

1

Чому б просто не використати щось на зразок diff (для текстових файлів) або xdelta (для бінарних файлів) для створення diff? Чому потрібно спеціально дістати щось із rsync?


Мені не потрібна rsync, але вона повинна бути віддаленою
Rory

О, ні, шш!
жіноча

1

Щоб розширити відповідь Кайла, це автоматизує процес. Зауважте, що він абсолютно неперевірений, напевно, досить крихкий, і може видалити комп'ютер і вбити вашу собаку.

#!/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')

0

Алгоритм rsync працює, порівнюючи бінарні фрагменти файлу. Такий двійковий розріз не може бути надрукований. Існує команда під назвою rdiff, яка використовує алгоритм rsync для генерування двійкового розходження, але я не думаю, що це було б корисно для того, що ви описуєте, зазвичай використовується для реалізації покрокових резервних копій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.