Утилита diff сравнивает содержимое файла1 и файла2, и выдает
в стандартный выходной поток список изменений, необходимых для преобразования файла1
в файл2. Этот список должен быть минимальным. Если файлы идентичны, никакие
результаты не выдаются.
Обычный результат содержит строки следующего вида:
n1 a n3,n4n1,n2 d n3n1,n2 c n3,n4
где значения n1 и n2 представляют строки файла1, а n3 и n4
представляют строки в файле2. Эти строки напоминают команды
ed(1) для преобразования файла1 в файл2.
Если поменять местами a и d и прочитать команды в обратном порядке, можно
преобразовать файл2 в файл1. Как и в редакторе ed, пары совпадающих
номеров строк, когда n1=n2 или n3=n4, сокращаются до одного
номера строки.
После каждой из таких строк идут все затронутые строки первого файла, предваренные
символом '<', а затем - все затронутые строки второго файла, предвареные символом '>'.
Заменять символы табуляции пробелами в строках результата. Обычно или
при задании опции -c в результаты добавляются символы
в начале каждой строки, которые могут нарушить отступы в исходных строках, что
затруднит их интерпретацию. Эта опция сохраняет отступы в исходных строках.
Игнорировать все пробелы (символы пробела и табуляции) и считать все строки
пробелов одинаковыми; например, при установке этой опции строки
'if ( a == b )' и 'if(a==b)' будут считаться совпадающими.
Выдавать листинг различий с тремя строками контекста. При указании этой опции
формат результата несколько изменяется: результат начинается с идентификации
сравниваемых файлов и их дат создания, а затем каждое изменение отделяется строкой
из двенадцати звездочек (*). Строки, удаленные из файла1,
помечаются минусом (-); строки, добавленные в файл2, помечаются
плюсом (+). Измененные строки в обоих файлах помечаются восклицательным
знаком (!).
Выдать сценарий, состоящий только из команд a, c и d редактора ed,
который позволит пересоздать файл2 по файлу1. В сочетании с опцией
-e, следующая командная строка интерпретатора может помочь поддерживать
несколько версий файла. Необходим только исходный файл ($1) и цепочка
сценариев ed для перехода от версии к версии ($2, $3, ...),
построенные с помощью утилиты diff. В стандартный выходной поток будет выдана
"последняя версия".
(shift; cat $*; echo '1,$p') | ed - $1
За исключением редких случаев, diff строит минимально достаточный набор
различий между файлами.
Выполнить быстрое, но приблизительное сравнение. Эта опция срабатывает только если
различия невелики и легко выявляются, но зато сравнивать можно файлы неограниченной
длины. Опции -c, -e,
-f и -n совместно с -h
использовать нельзя. Утилита diff при задании этой опции в каталоги
не переходит.
Создает общую версию файла1 и файла2 с директивами препроцессора
языка C, так что при компиляции результата без определенной строки
будет получено то же самое, что и при компиляции файла1, а если строка
определена, - то же самое, что и при компиляции файла2.
Следующие опции используются при сравнении каталогов:
Выдавать результат в "длинном" формате. Перед вызовом diff, каждый файл
пропускается через фильтр pr(1) для разбиения на
страницы. Другие различия запоминаются и выдаются после всех различий текста
в файлах.
Полные имена срравниваемых файлов или каталогов. Если в качестве файла1 или
файла2 указан -, вместо него будет использоваться стандартный
входной поток.
каталог1, каталог2
Полные имена сравниваемых каталогов.
Если только один из файлов является каталогом, утилита diff будет
применяться к другому файлу и к одноименному (имя которого соответствует последнему
компоненту имени файла) с ним файлу в каталоге.
Если dir1 - каталог, содержащий подкаталог x, dir2 -
каталог, содержащий подкаталог x, оба каталога, dir1/x и
dir2/x содержат файлы date.out, а каталог dir2/x содержит
также файл y, команда:
example% diff -r dir1 dir2
может выдать результат, аналогичный следующему:
Common subdirectories: dir1/x and dir2/x
Only in dir2/x: y
diff -r dir1/x/date.out dir2/x/date.out
1c1
< Mon Jul 2 13:12:16 PDT 1990
---
> Tue Jun 19 21:41:39 PDT 1990
Описание следующих переменных среды, влияющих на работу diff,
см. на странице справочного руководства
environ(5):
LC_CTYPE, LC_MESSAGES, LC_TIMENLSPATH.
TZ
Задает локаль, влияющую на часовой пояс, используемый при вычислении
временных отметок, которые выдаются при указании опций -C
и -c.
Сценарии редактирования, выдаваемые опциями -e или
-f, не позволяют создавать строки, состоящие из
одной точки (.).
Сообщение Missing NEWLINE в конце файла свидетельствует о том, что в последней
строке соответствующего файла нет символа новой строки. Если в результате последние строки
файлов получаются разными, они помечаются и выдаются, хотя на вид
они кажутся одинаковыми.