Пользовательские команды |
diff(1) |
diff - выдача построчных различий между парами текстовых файлов
-
diff [-bitw] [-c | -e | -f | -h | -n] файл1 файл2
diff [-bitw] [ -C число ] файл1 файл2
diff [-bitw] [ -D строка ] файл1 файл2
diff [-bitw] [ -c | -e | -f | -h | -n] [-l] [-r] [-s] [-S имя] каталог1 каталог2
Утилита diff сравнивает содержимое файла1 и файла2, и выдает
в стандартный выходной поток список изменений, необходимых для преобразования файла1
в файл2. Этот список должен быть минимальным. Если файлы идентичны, никакие
результаты не выдаются.
Обычный результат содержит строки следующего вида:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
где значения n1 и n2 представляют строки файла1, а n3 и n4
представляют строки в файле2. Эти строки напоминают команды
ed(1) для преобразования файла1 в файл2.
Если поменять местами a и d и прочитать команды в обратном порядке, можно
преобразовать файл2 в файл1. Как и в редакторе ed, пары совпадающих
номеров строк, когда n1=n2 или n3=n4, сокращаются до одного
номера строки.
После каждой из таких строк идут все затронутые строки первого файла, предваренные
символом '<', а затем - все затронутые строки второго файла, предвареные символом '>'.
- -b
-
Игнорировать хвостовые пробелы (символы пробела и табуляции) и считать любые
строки из пробелов совпадающими.
- -i
-
Игнорировать регистр символов; например, 'A' и 'a' при
сравнении будут считаться совпадающими.
- -t
-
Заменять символы табуляции пробелами в строках результата. Обычно или
при задании опции -c в результаты добавляются символы
в начале каждой строки, которые могут нарушить отступы в исходных строках, что
затруднит их интерпретацию. Эта опция сохраняет отступы в исходных строках.
- -w
-
Игнорировать все пробелы (символы пробела и табуляции) и считать все строки
пробелов одинаковыми; например, при установке этой опции строки
'if ( a == b )' и 'if(a==b)' будут считаться совпадающими.
Следующие опции - взаимоисключающие:
- -c
-
Выдавать листинг различий с тремя строками контекста. При указании этой опции
формат результата несколько изменяется: результат начинается с идентификации
сравниваемых файлов и их дат создания, а затем каждое изменение отделяется строкой
из двенадцати звездочек (*). Строки, удаленные из файла1,
помечаются минусом (-); строки, добавленные в файл2, помечаются
плюсом (+). Измененные строки в обоих файлах помечаются восклицательным
знаком (!).
- -C число
-
Выдает листинг различий, идентичный выдаваемому опцией -c, но с указанным
числом строк контекста.
- -e
-
Выдать сценарий, состоящий только из команд a, c и d редактора ed,
который позволит пересоздать файл2 по файлу1. В сочетании с опцией
-e, следующая командная строка интерпретатора может помочь поддерживать
несколько версий файла. Необходим только исходный файл ($1) и цепочка
сценариев ed для перехода от версии к версии ($2, $3, ...),
построенные с помощью утилиты diff. В стандартный выходной поток будет выдана
"последняя версия".
(shift; cat $*; echo '1,$p') | ed - $1
За исключением редких случаев, diff строит минимально достаточный набор
различий между файлами.
- -f
-
Выдать аналогичный сценарий с командами в обратном порядке - для редактора
ed он не подходит.
- -h
-
Выполнить быстрое, но приблизительное сравнение. Эта опция срабатывает только если
различия невелики и легко выявляются, но зато сравнивать можно файлы неограниченной
длины. Опции -c, -e,
-f и -n совместно с -h
использовать нельзя. Утилита diff при задании этой опции в каталоги
не переходит.
- -n
-
Выдать сценарий, аналогичный выдаваемому при указании опции -e,
но в обратном порядке и количеством строк для каждой команды вставки или удаления.
- -D строка
-
Создает общую версию файла1 и файла2 с директивами препроцессора
языка C, так что при компиляции результата без определенной строки
будет получено то же самое, что и при компиляции файла1, а если строка
определена, - то же самое, что и при компиляции файла2.
Следующие опции используются при сравнении каталогов:
- -l
-
Выдавать результат в "длинном" формате. Перед вызовом diff, каждый файл
пропускается через фильтр pr(1) для разбиения на
страницы. Другие различия запоминаются и выдаются после всех различий текста
в файлах.
- -r
-
Применять diff рекурсивно ко всем общим подкаталогам.
- -s
-
Выдавать информацию об идентичных файлах; обычно эти файлы в результатах не
упоминаются.
- -S имя
-
Начинает сравнение каталогов с середины, с файла с указанным именем.
Поддерживаются следующие операнды:
- файл1, файл2
-
Полные имена срравниваемых файлов или каталогов. Если в качестве файла1 или
файла2 указан -, вместо него будет использоваться стандартный
входной поток.
- каталог1, каталог2
-
Полные имена сравниваемых каталогов.
Если только один из файлов является каталогом, утилита diff будет
применяться к другому файлу и к одноименному (имя которого соответствует последнему
компоненту имени файла) с ним файлу в каталоге.
Описание работы утилиты diff с файлами длиной более 2 Гбайт
(231 байт) см. на странице справочного руководства
largefile(5).
Пример 1: Пример использования команды 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_TIME NLSPATH.
- TZ
-
Задает локаль, влияющую на часовой пояс, используемый при вычислении
временных отметок, которые выдаются при указании опций -C
и -c.
Команда возвращает следующие статусы выхода:
0 | Различий не найдено. |
1 | Различия найдены. |
>1 | Произошла ошибка. |
- /tmp/d?????
-
временные файлы, используемые при сравнении
- /usr/lib/diffh
-
выполняемый файл для реализации опции -h
Описание следующих атрибутов см. на странице справочного руководства
attributes(5):
ТИП АТРИБУТА |
ЗНАЧЕНИЕ АТРИБУТА |
Доступен в пакете |
SUNWesu |
CSI |
Включено |
-
bdiff(1),
cmp(1),
comm(1),
dircmp(1),
ed(1),
pr(1),
sdiff(1),
attributes(5),
environ(5),
largefile(5)
Сценарии редактирования, выдаваемые опциями -e или
-f, не позволяют создавать строки, состоящие из
одной точки (.).
Сообщение Missing NEWLINE в конце файла свидетельствует о том, что в последней
строке соответствующего файла нет символа новой строки. Если в результате последние строки
файлов получаются разными, они помечаются и выдаются, хотя на вид
они кажутся одинаковыми.
Последнее изменение: 20 декабря 1996 года
Copyleft (no c) - Fuck copyright!, 2003 В. Кравчук,
OpenXS Initiative, перевод на русский язык