Для сравнения двух или нескольких файлов в 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, которая в наглядном виде показывает где и что изменилось в файлах.
Комментарии
00:25
16:15
23:26
17:46