Какая команда даст мне двоичную разницу между двумя файлами и позволит применить ее?

Чтобы получить что-то вроде grep | cut, вы можете использовать sed -n s/A/B/p.

По умолчанию sedпечатает каждую строку после обработки всех команд. Вы можете отключить весь вывод, который вы явно не печатаете из команды, с помощью sed -n.

Команда sпринимает форму s/$FIND/$REPLACE/$FLAGS. В частности, флаг pпечатает строку всякий раз, когда производится замена.

В сочетании с ними вы можете легко совмещать и резать:

sed -nE "s/email2 = (.+)/\1/p" < /etc/emails.conf

На самом деле, это более мощное средство, чем grep | cut, потому что вы можете использовать произвольный шаблон замены.

(Параметр -Eвключает современное регулярное выражение, которое позволяет ссылаться на группы захвата в шаблоне замены. Для простого кроя вы можете обойтись без него, используя более умные узоры.)

2
25.10.2020, 22:40
2 ответа

Лично я большой поклонник deltup , который хорошо известен только среди пользователей Gentoo.

Он очень быстрый и слишком часто опережает xdeltaс большим отрывом.

4
18.03.2021, 22:54

Я предполагаю, что вы хотите перенести разницу между двумя системами, и именно поэтому вы не можете перебазировать свои образы QCOW в общий корень.

Инструмент rsyncпозволит вам создать двоичную разницу. Вот рабочий пример с (файлами значительно )меньшего размера

ls -l ?.qcow2
-rwxrwx--- 1 root root 76993536 Jan  2  2020 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2

По вашему вопросу нам нужно получить различия от b.qcow2до a.qcow2. Обратите внимание, что при условии, что rsyncможет получить доступ как к источнику, так и к месту назначения, нет необходимости, чтобы они находились на одном сервере

.
rsync -av --only-write-batch b_to_a.rsyncdiff b.qcow2 a.qcow2

Это определяет разницу и записывает ее в b_to_a.rsyncdiff, а также попутно создает вспомогательный шелл-скрипт

ls -l b_to_a*
-rw------- 1 root root 35617731 Oct 26 09:26 b_to_a.rsyncdiff
-rwx------ 1 root root       54 Oct 26 09:26 b_to_a.rsyncdiff.sh

cat b_to_a.rsyncdiff.sh
rsync -av --read-batch b_to_a.rsyncdiff ${1:-a.qcow2}

Чтобы применить изменение, вам просто нужен исходный код a.qcow2и разница

rsync -av --read-batch b_to_a.rsyncdiff a.qcow2
receiving incremental file list
b.qcow2

sent 61,509 bytes  received 35,621,188 bytes  71,365,394.00 bytes/sec
total size is 77,337,600  speedup is 2.17

Результат

ls -l ?.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2
3
18.03.2021, 22:54

Теги

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