Применение инструментария сравнения файлов

Первый шаг определения различий в файлах состоит в сравнении двух файлов. Для того чтобы найти различия, нужен инструментарий сравнения файлов. В качестве примера рассмотрим некоторые примеры инструментальных средств сравнения файлов.

Использование команды fc

Команда fc, включаемая в течение многих лет в DOS, а позднее и в Windows – первый инструментарий, который будет подробно рассмотрен. На машинах с операционной системой Windows 9x команду fc можно найти в директории c: windowscommand, c: windows или, в крайнем случае, в одной из директорий Windows. По умолчанию директория c: windowscommand перечислена в списке каталогов, используемых для задания порядка поиска выполнимых программ. Список задается командой path. Поэтому при необходимости можно просто набрать fc и выполнить команду. Опции команды fc перечислены ниже:

C:windowsCOMMAND>fc /?

Compares two files or sets of files and displays the

differences between

them.

FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/W] [/nnnn]

[drive1:][path1]filename1

[drive2:][path2]filename2

FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

/A Displays only first and last lines for each set of

differences.

/B Performs a binary comparison.

/C Disregards the case of letters.

/L Compares files as ASCII text.

/LBn Sets the maximum consecutive mismatches to the

specified number of lines.

/N Displays the line numbers on an ASCII comparison.

/T Does not expand tabs to spaces.

/W Compresses white space (tabs and spaces) for

comparison.

/nnnn Specifies the number of consecutive lines that must

match after a mismatch.

О переключателе /b уже говорилось. При сравнении двоичных файлов без указания переключателя процесс сравнения файлов завершается при достижении символа конца файла или нулевого байта. У этой команды переключатели режимов не чувствительны к регистру. Другими словами, работа команды не зависит от того, набраны ли переключатели строчными или заглавными буквами. Например, в файле подсказки описан переключатель /В, набранный заглавными буквами, в то время как в книге продемонстрирована прекрасная работа команды с переключателем /b. У команды есть ряд дополнительных переключателей, который читатель сможет изучить самостоятельно. В дальнейшем будет сказано о ряде утилит, которые сравнивают текстовые файлы лучше, чем команда fc. Но если выбранная читателем утилита может и отсутствовать на его компьютере, то, в крайнем случае, fc всегда присутствует на машинах с операционной системой Windows.

Примечание

В первом приближении эквивалентом команды fc в системе UNIX является команда cmp -l (l — строчная буква).

Использование команды diff

Первоначально команда diff появилась на платформе UNIX. Она позволяет сравнивать двоичные файлы, но особенно полезна для сравнения текстов. Фактически ее возможностей сравнения текстовых файлов более чем достаточно. Полностью перечислить все возможности команды diff на страницах этой книги не представляется возможным, потому что их слишком много. Но с ними можно ознакомиться на оперативных страницах руководств UNIX или по документации (man page, сокр. manual page – оперативная страница руководства, – гипертекстовая страница консультативной информации, поясняющая действие конкретной команды).

Для того чтобы у читателя стожилось представление о команде diff, если он не слышал о ней ранее, в главе приведен список наиболее часто используемых возможностей команды. Команда diff определяет изменения в двух файлах, которые нужно сделать для приведения их в соответствие друг к другу. Она позволяет запоминать версии файлов без необходимости хранения полных копий каждой версии файла. Команда diff настолько хороша, что понимает, должны ли строки удаляться или добавляться в файл при приведении файлов в соответствие друг к другу:

[root@rh /tmp]$ diff decode.c decode2.c

14a15

> #include <newinclude.h>

[root@rh /tmp]$ diff decode2.c decode.c

15d14

< #include <newinclude.h>

Указанные в аргументах два файла (decode2.c и decode.c) полностью совпадают, за исключением строки с оператором #include <newinclude.h>, добавленной к файлу decode2.c. В первом примере файл decode.c – первый аргумент команды diff, а decode2.c – второй. Протокол работы команды свидетельствует о том, что если во второй файл в 14-ю строчку добавить 15-ю строку из файла decode2.c #include <newinclude.h>, то далее файлы будут соответствовать друг другу. А если поменять аргументы местами, то для приведения файлов в соответствие надо будет удалить 15-ю строчку файла decode2.c (обратите внимание на буквы a в первом отчете и d во втором).

Результат выполнения команды называется выводом команды diff (diff-файлом), или файлом различий, и обладает тем свойством, что если есть diff-файл и один из исходных сравниваемых файлов, то второй файл можно восстановить. Именно поэтому для отправки небольшого количества изменений текстового файла, особенно исходных текстов программ, часто используется пересылка файла различий. При отправке по почте открытых исходных текстов исправлений уязвимостей программ отправитель не всегда пересылает файл различий, который позволяет исправить исходный текст программы. Программа, которая исправляет ошибки, используя файл различий, называется патчем (заплаткой).

В зависимости от версии diff в отчет команды, кроме выявленных различий, включается и другая информация, например для редактора ed или системы управления аудитом (RCS – Revision Control System). Для того чтобы ее можно было обработать, включаемая информация должна содержать регулярные выражения для выполнения некоторых операций, понимать файлы программ, написанных на языке С, и, как часть своего отчета, может выводить имя функции, в которой выявлены изменения.

Благодаря проекту Cygwin доступна Windows-версия команды diff (как и большинство других программ UNIX). В рамках этого проекта задуман перенос ряда программного инструментария GNU и других программ UNIX на платформу Windows. В той или иной форме продукты GNU выпускаются под защитой общедоступной лицензии GNU (GPL – GNU PublicLicense), в соответствии с которой продукт становится общедоступен. Дополнительные сведения (включая пакет, содержащий Windows-версию команды diff) могут быть найдены по адресу http://sourceware.cygnus.com/cygwin.

Компания Microsoft включила утилиту Windiff в состав инструментария ресурсов (resource kits) Windows NT и Windows 98. Это графическая версия команды diff, которая отображает изменения разными цветами и имеет графическое представление удаляемых или вставляемых строк.

Больше книг — больше знаний!

Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом

ПОЛУЧИТЬ СКИДКУ

Данный текст является ознакомительным фрагментом.