Главная >> Инструкции >> Сравнение файлов в Linux

Сравнение файлов в Linux

Иногда возникает необходимость сравнить несколько файлов между собой. Это может понадобиться при анализе разницы между несколькими версиями конфигурационного файла или просто для сравнения различных файлов. В Linux для этого есть несколько утилит, как для работы через терминал, так и в графическом интерфейсе.

В этой статье мы рассмотрим как выполняется сравнение файлов Linux. Разберем самые полезные способы, как для терминала, так и в графическом режиме. Сначала рассмотрим как выполнять сравнение файла linux с помощью утилиты diff.


Содержание статьи

Сравнение файлов diff

Утилита diff linux - это программа, которая работает в консольном режиме. Ее синтаксис очень прост. Вызовите утилиту, передайте нужные файлы, а также задайте опции, если это необходимо:

$ diff опции файл1 файл2

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

  • -q - выводить только отличия файлов;
  • -s - выводить только совпадающие части;
  • - выводить нужное количество строк после совпадений;
  • -u - выводить только нужное количество строк после отличий;
  • -y - выводить в две колонки;
  • -e - вывод в формате ed скрипта;
  • -n - вывод в формате RCS;
  • -a - сравнивать файлы как текстовые, даже если они не текстовые;
  • -t - заменить табуляции на пробелы в выводе;
  • -l - разделить на страницы и добавить поддержку листания;
  • -r - рекурсивное сравнение папок;
  • -i - игнорировать регистр;
  • -E - игнорировать изменения в табуляциях;
  • -Z - не учитывать пробелы в конце строки;
  • -b - не учитывать пробелы;
  • -B - не учитывать пустые строки.

Это были основные опции утилиты, теперь давайте рассмотрим как сравнить файлы Linux. В выводе утилиты кроме, непосредственно, отображения изменений, выводит строку в которой указывается в какой строчке и что было сделано. Для этого используются такие символы:

  • a - добавлена;
  • d - удалена;
  • c - изменена.

К тому же, линии, которые отличаются, будут обозначаться символом <, а те, которые совпадают - символом >.

Вот содержимое наших тестовых файлов:

Теперь давайте выполним сравнение файлов diff:

diff file1 file2

В результате мы получим строчку: 2,3c2,4. Она означает, что строки 2 и 3 были изменены. Вы можете использовать опции для игнорирования регистра:

diff -i file1 file2

Можно сделать вывод в две колонки:

diff -y file1 file2

А с помощью опции -u вы можете создать патч, который потом может быть наложен на такой же файл другим пользователем:

diff -u file1 file2

Чтобы обработать несколько файлов в папке удобно использовать опцию -r:

diff -r ~/tmp1 ~/tmp2

Для удобства, вы можете перенаправить вывод утилиты сразу в файл:

diff -u file1 file2 > file.patch

Как видите, все очень просто. Но не очень удобно. Более приятно использовать графические инструменты.

Сравнение файлов Linux с помощью GUI

Существует несколько отличных инструментов для сравнения файлов в linux в графическом интерфейсе. Вы без труда разберетесь как их использовать. Давайте рассмотрим несколько из них:

1. Kompare

 

Kompare - это графическая утилита для работы с diff, которая позволяет находить отличия в файлах, а также объединять их. Написана на Qt и рассчитана в первую очередь на KDE. Кроме сравнения файлов утилита поддерживает сравнение каталогов и позволяет создавать и применять патчи к файлам.

2. Meld

 

Это легкий инструмент для сравнения и объединения файлов. Он позволяет сравнивать файлы, каталоги, а также выполнять функции системы контроля версий. Программа создана для разработчиков и позволяет сравнивать до трёх файлов. Можно сравнивать каталоги и автоматически объединять сравниваемые файлы. Кроме того поддерживаются такие системы контроля версий, как Git.

3. Diffuse

 

Diffuse - еще один популярный и достаточно простой инструмент для сравнения и слияния файлов. Он написан на Python 2. Поэтому в современных версиях Ubuntu программу будет сложно установить. Поддерживается две основные возможности - сравнение файлов и управление версиями. Вы можете редактировать файлы прямо во время просмотра.

4. KDiff3

 

KDiff3 - еще один отличный, свободный инструмент для сравнения файлов в окружении рабочего стола KDE. Он входит в набор программ KDevelop и работает на всех платформах, включая Windows и MacOS. Можно выполнить сравнение до трех файлов Linux или даже сравнить каталоги. Кроме того, есть поддержка слияния и ручного выравнивания.

5. TkDiff

Это очень простая утилита для сравнения файлов написанная на основе библиотеки tk. Она позволяет сравнивать только два файла, поддерживает поиск и редактирование сравниваемых файлов.

Выводы

В этой статье мы рассмотрели как выполняется сравнение файлов linux с помощью терминала, как создавать патчи, а также сделали небольшой обзор лучших графических утилит для сравнения файлов. А какие инструменты для сравнения используете вы? Напишите в комментариях!

9 комментариев к “Сравнение файлов в Linux”

  1. Весьма полезный сайт, спасибо автору за труд.
    В этой статье, к сожалению, есть грубые ошибки. Неправильно описаны ключи diff.
    На самом деле:
    -q — сообщить только факт отличия файлов (а не сами отличия файлов)
    -s — сообщить факт совпадения файлов (а вовсе не совпадающие части)
    -b — не учитывать разницу в количестве пробельных символов (а вовсе не игнорировать пробелы)
    А чтобы именно игнорировать пробелы, служит опция:
    -w — вообще не учитывать пробельные символы

    Пробельные символы — это собственно пробел, символ табуляции и перевод строки (в некоторых случаях).

    Ответить
  2. Здравствуйте. Мне нужно сравнить файлы с 3 виртуальных машин, находящихся по одному адресу /home/user/test. IP адреса необходимо брать из файла /etc/hots.
    Не найду информацию, как именно через hosts подключаться

    Ответить
  3. Файл /etc/hosts просто устанавливает соответствие между ip-адресом и именем машины ( или именами, если их несколько ). Подключаться к машинам надо, скорее всего, через ssh.

    Ответить
  4. Всем привет
    Нужно сравнить 2 массива, найти файлы, которые есть уже и там, и разобрать их по подпапкам

    Адрес 1
    /Downloads/Folder1/Folder2/файл1.mkv
    /Downloads/Folder1/Folder2/файл2.mkv
    Адрес 2
    /Serials/Folder1/Folder2/файл1.mkv

    Как сделать так, чтобы скрипт сканировал /Downliads, видел, что файл1.mkv в папке /Downloads/Folder1/Folder2/файл1.mkv соответствует названию в /Serials/Folder1/Folder2/файл1.mkv , брал из /Downloads/Folder1/Folder2/файл2.mkv и помещал его рядом с /Serials/Folder1/Folder2/файл1.mkv ?

    Иными словами,
    Найти в подпапках Downloads файлы, сопоставить с файлами в подпапках Serials. Если найдено 100% совпадение, то из подпапки Downloads, где лежит файл, который совпадает с файлом из подпапки Serials, переместить все файлы из подпапки Downloads в подпапку Serials

    find ./Downloads -type f -iname "*.mkv" - получили массив раз
    find ./Serials -type f -iname "*.mkv" - получили массив два

    а как их сравнить и разобрать?

    Ответить

Оставьте комментарий