Почему мой патч выходит в двоичном формате?

Я различаю две директории, 220 и sue, следующим образом:

diff -r 220 sue > diff.txt

Впоследствии каталог выглядит следующим образом:

$ ls -al
total 20
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 10:44 .
drwxrwx---+ 1 SYSTEM         SYSTEM           0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty         Domain Users 15463 Jun 24 10:44 diff.txt
drwxrwx---+ 1 Administrators Domain Users     0 Jun 24 09:55 sue

Подтверждением diff.txt является текст следующим образом:

$ file diff.txt
diff.txt: HTML document, ASCII text, with very long lines, with CRLF, LF line terminators

Вышесказанное в первую очередь демонстрирует, что я могу использовать diff и вижу, что не так уж много различий.

Затем создайте файл патча в соответствии с предложением https://docs.moodle.org/dev/How_to_create_a_patch:

$ diff -Naur 220 sue > patch.txt

Результаты в каталоге выглядят следующим образом:

$ ls -al
total 133836
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 10:57 .
drwxrwx---+ 1 SYSTEM         SYSTEM               0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty         Domain Users     15463 Jun 24 10:44 diff.txt
-rw-rwxr--+ 1 jempty         Domain Users 137024100 Jun 24 10:57 patch.txt
drwxrwx---+ 1 Administrators Domain Users         0 Jun 24 09:55 sue

Как вы можете видеть, файл patch.txt огромен и, как оказалось, он двоичный:

$ file patch.txt
patch.txt: data

Должен ли я использовать patch команда вместо diff

1 ответ

Решение

У вас есть двоичные файлы (программы, библиотеки DLL, файлы данных и т. Д.) В любом 220 или же sue, или оба.

Первая команда (diff -r) признает, что некоторые файлы являются двоичными, и когда это так, diff просто распечатает сообщение, что они отличаются. Например, если оба 220 а также sue есть бинарный файл foo.dat в них вы ожидаете, что результат будет примерно таким:

Binary files 220/foo.dat and sue/foo.dat differ

Вторая команда имеет -a флаг, который говорит diff безоговорочно относиться ко всем файлам как к незашифрованному тексту, чтобы он сравнивал и печатал необработанный двоичный контент различий между 220/foo.dat а также sue/foo.dat, поскольку diff сравнивает построчно, и двоичные файлы обычно имеют несколько разрывов строк, строки, сравниваемые и показанные в выходных данных, будут довольно большими даже для относительно небольших файлов.

Чтобы уменьшить размер diffвывод, не используйте -a флаг:

$ diff -Nur 220 sue > patch.txt

Если вас не волнуют различия между двоичными файлами, вы можете отфильтровать вывод, чтобы исключить их:

$ diff -Nur 220 sue | grep -v '^Binary files.*differ' > patch.txt

Чтобы ответить на ваш последний вопрос, patch противоположность diffтак что вы не будете использовать patch Вот. Ты используешь diff чтобы найти различия между файлами, и вы используете patch применять различия от diffвывод в эти файлы. Термины используются взаимозаменяемо при обращении к выводу diff,

Другие вопросы по тегам