Главная >> Инструкции >> Сравнение файлов в 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 с помощью терминала, как создавать патчи, а также сделали небольшой обзор лучших графических утилит для сравнения файлов. А какие инструменты для сравнения используете вы? Напишите в комментариях!

Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

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" - получили массив два

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

    Ответить

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