Я различаю две директории, 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 ответ1

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .