Сравнение файлов в Linux (команда diff). Linux статьи
Написать статью
Войдите, чтобы писать статьи

Сравнение файлов в Linux (команда diff)

4

Для сравнения двух или нескольких файлов в Linux есть команда diff. Она может сравнивать как отдельные файлы, так и каталоги. Рассмотрим синтаксис, опции команды diff и несколько примеров использования.

Синтаксис команды diff

Команда diff имеет следующий синтаксис:

diff [опции] файлы-или-директории

Мы указываем опции и подаем на вход два или более файлов или директорий, которые нам нужно сравнить.

Опции команды diff

Рассмотрим основные опции команды diff. Я рассмотрю только те опции, которые сам использую наиболее часто.

-Eигнорировать изменения, связанные с добавлением символа табуляции в тексте.
-bигнорировать изменения, связанные с добавлением пробелов.
-wигнорировать изменения, связанные с добавлением пробелов и табуляции.
-Bигнорировать новые пустые строки.
-p (или —show-c-function)показать название функции языка C, в которой найдены изменения.
-y (или —side-by-side)отобразить результаты в две колонки.
-rпросматривать каталоги рекурсивно.
-X FILEисключить из поиска файлы, имена которых совпадают с шаблонами в файле FILE.
-d (или —minimal)попытаться найти как можно меньше изменений (то есть исключить ложные срабатывания).

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

Сравнение двух текстовых файлов

Для простого сравнения двух текстовых файлов с именами myfile1 и myfile2 выполним в терминале команду:

diff myfile1 myfile2

Вывод команды diff удобно перенаправить в файл с расширением diff. Большинство текстовых редакторов в Linux, например Gedit, распознают этот файл и подсвечивают его синтаксис. Чтобы направить результат сравнения в файл changes.diff нужно использовать символ перенаправления потока (>):

diff myfile1 myfile2 > changes.diff

Сравнение директорий, содержащих текстовые файлы

Рассмотрим пример сравнения двух директорий (mydir1 и mydir2), которые содержат текстовые файлы. Основное отличие здесь от примера выше состоит в том, что мы добавим опцию -r, означающую рекурсивный обход файлов в директориях.

diff -r mydir1 mydir2 > changes.diff

Теперь предположим, что в директориях, в которых мы сравниваем файлы, находится много «мусора», который мы не должны сравнивать. Создадим файл excludeFiles и запишем в него шаблоны и названия файлов, которые мы не должны сравнивать. Например, содержимое excludeFiles может иметь вид:

*.o
ChangeLog*
*.bak
*.exe

Теперь укажем команде diff, чтобы она использовала наш файл excludeFiles при сравнении каталогов:

diff -r -X excludeFiles mydir1 mydir2 > changes.diff

Таким образом, мы сравниваем файлы, имена которых не попадают под шаблоны в файле excludeFiles, например, vasya.exe или ChangeLog12.

Добавим еще несколько опций, которые описаны выше, чтобы улучшить результат сравнения:

diff -rwBd -X excludeFiles mydir1 mydir2 > changes.diff

Мы сравниваем файлы в директориях mydir1 и mydir2, игнорируя изменения, связанные с добавлением пустых строк, пробелов, табуляции, а также используем шаблоны имен файлов в excludeFiles, чтобы исключить из сравнения ненужные файлы.

Заключение

Дополнительную информацию по использованию команды diff в вашей системе Linux вы можете получить, выполнив команду:

man diff

Также существуют программы, которые позволяют сравнивать файлы, используя графический интерфейс. Например, программа Meld, которая в наглядном виде показывает где и что изменилось в файлах.

Лайков: +1
войдите, чтобы ставить лайки

Материалы по теме:

  • Meld — наглядное сравнение файлов
4
  • Опубликовано: 06.12.2010

Комментарии

Олег
30.11.2012
00:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Спасибо!
Илья
02.06.2014
16:15
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Выручил, коротко и ясно) оба варианта помогли, за что благодарен сильно)
Пётр
22.03.2015
23:26
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Опцию -u забыли.
Валера
16.01.2020
17:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
А как же diff -s ?

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила