Порівняння файлів у Linux (команда diff). Огляд інструментів для візуального порівняння та вирішення конфліктів злиття Порівняння рядків у файлах linux

Веб-майстрам або власникам сайтів часто буває необхідно порівняти два файли за вмістом. З цієї статті ви дізнаєтесь як порівняти два файли між собою. Тут описані всі відомі мені способи для порівняння текстових файлів та скрипти (html, css, php тощо).

Спосіб 1. Meld

Meld- графічний інструмент для отримання відмінностей та злиття двох файлів, двох каталогів. Meld - візуальний інструмент порівняння та об'єднання файлів та каталогів для Linux. Meld орієнтований насамперед для розробників. Однак він може виявитися корисним будь-якому користувачеві, який потребує хорошого інструменту для порівняння файлів та директорій.

У Meld ви можете порівнювати два або три файли, або два або три каталоги. Ви можете переглядати робочу копію з популярних систем контролю версій, таких як CVS, Subversion, Bazaar-NG і Mercurial. Meld представлений більшості linux дистрибутивів (Ubuntu, Suse, Fedora та інших.), і у їх основних репозиторіях.

# aptitude install meld

Спосіб 2. Порівняння вмісту двох файлів у програмі WinMerge.

Безкоштовна програма WinMerge дозволяє порівнювати як вміст файлів, вона також порівнює вміст цілих папок. WinMerge є Open Source інструментом порівняння та злиття для Windows. WinMerge може порівнювати як файли, так і папки, відображаючи відмінності у візуальній текстовій формі, які легко зрозуміти та обробити.

Після встановлення відкриваєте пункт меню «Файл» - «Відкрити». Вибираєте файли для порівняння. Для цього натискаєте кнопку «Огляд» і вибираєте файл. Вибравши файли, натискаєте кнопку «ОК».

У WinMerge також можна редагувати файли. Після закриття вікна порівняння програма запропонує зберегти зміни у файлах.

Спосіб 3. diff

diff- Утиліта порівняння файлів, що виводить різницю між двома файлами.

    Для порівняння каталогів використовуйте цю команду: $diff-qr< current-directory> < backup-directory>

Спосіб 4. Kompare

Kompare - відображає різницю між файлами. Вміє порівнювати вміст файлів або каталогів, а також створювати, показувати та застосовувати файли патчів. Kompare – це графічна утиліта для роботи з diff, яка дозволяє знаходити відмінності у файлах, а також поєднувати їх. Написана на Qt і розрахована насамперед на KDE. Ось її основні особливості:

    Підтримка кількох форматів diff;

    Підтримка порівняння файлу linux та каталогів;

    Підтримка перегляду файлів diff;

    Інтерфейс, що настроюється;

    Створення та застосування патчів до файлів.

Спосіб 5. Порівняння файлів у програмі Total Commander

    Операційні системи, що підтримуються: Windows

У Total Commander існує інструмент порівняння файлів за вмістом, де можна не лише порівняти вміст, але й редагувати його та копіювати з одного файла до іншого.

Після запуску Total Commander – в одній із панелей вибираєте (клавіша Insert) перший файл для порівняння – у другій панелі відкриваєте папку з другим файлом та ставимо на нього курсор. Викликаємо програму для порівняння: "Файли→Порівняти за вмістом".

Для внесення змін до файлу достатньо натиснути кнопку «Редагувати». У програмі доступні функції копіювання та відкату, пошуку та зміна кодування. Якщо ви внесли зміни до файлу, то після закриття вікна порівняння буде запропоновано зберегти зміни.

Спосіб 6. Порівняння файлів у Notepad++

    Операційні системи, що підтримуються: Windows, можливий запуск в Linux

Notepad++ не вміє порівнювати файли. Для появи цього функціоналу в Notepad++ необхідно встановити плагін Compare.

Запускаєте редактор – переходьте до пункту меню "Плагіни" - "Plugin Manager" - "Show Plugin Manager". У новому вікні вибираєте плагін Compare і тиснете кнопку Install.

Після встановлення плагіна відкрийте два файли та виберіть меню «Плагіни» - «Compare» - «Compare (Alt+D)». Результат порівняння файлів буде подано в окремих панелях. Навпроти рядків, у яких знайдені відмінності, стоятиме попереджувальний знак.

Спосіб 7. Порівняння файлів за допомогою командного рядка Windows

Порівняння за допомогою командного рядка Windows (cmd.exe) не дозволяє редагувати файли, але просто порівняти вміст файлів за допомогою цього способу ви можете.

Для виклику командного рядка Windows перейдіть "Пуск" - "Всі програми" - "Стандартні" - "Командний рядок" або натисніть клавішу Windows+R, введіть cmd і натисніть клавішу Enter.

У командному рядку введіть команду:

fc / N шлях до першого файлу шлях до другого файлу

З-під якої системи мені не доводилося возитися з кодом, рано чи пізно стає надто накладно порівнювати різні версії вихідників. Тут вказані легкі безкоштовні утилітки для пошуку відмінностей у файлах під Linux, Windows та Mac. Загальний формат запуску file1 file2.

Під Windows із завданням порівняння вмісту файлів (та й каталогів, що часом не марно) чудово справляється - WinMerge. Легка. Чи не зав'язана ні на які IDE. Писана на Qt і кросплатформна – має запускатися і на ніксах. Окрім файлів вміє порівнювати і вміст директорій (у тому числі на основі масок-регекспів). Можна навішувати додаткові плагіни.

WinMerge – крос-платформна утиліта для порівняння файлів і не лише

Mac – Opendiff. Є окремим компонентом XCode. Цілком собі запускається standalone з командного рядка. Відмінності підсвічує блідо-сірим, зате вміє до речі показувати стрілочками, що куди додалося. Може виконувати злиття (ключик-merge). Якщо крім порівнюваних файлів, вказати після ключа -ancestor спільний файл-предок, то порівняння буде проводитися з ним. Вміє порівнювати папки.

утиліта opendiff – безкоштовний засіб порівняння файлів на системі Mac

Linux – . Є на всіх платформах (Windows, Mac, Linux) за рахунок того, що також написаний на Qt. Вміє порівнювати до трьох файлів чи директорій. Підтримує можливість злиття змін за допомогою редагування для ручного вирішення конфліктів.

Утиліта kdiff3 – порівняння двох файлів

UPDATE 18.10.2013

Якщо в ніксах ви працюєте в Gnom'і то чудовий вибір – meld. Інтеграція з популярними системами контролю версій (Git, Subversion та ін), інструменти для злиття - авто-злиття, редагування з підхопленням поточних відмінностей "на льоту", підсвічування синтаксису. Існують порти для OS X Windows.

Ну а на крайняк (якщо нічого стороннього поставити не можна) – на допомогу приходить непоказний diff з-під командного рядка (встановлений на nix-like-системах, включаючи і Маки, і Соляриси). Гнучкий. Можна довго і з захопленням грати з налаштуваннями, щоб отримати можливість відображення відмінностей на основі маски (-F), отримувати порівняння у звичних двох колонках (ключик -side-by-side) і т.п. Для об'ємних незнайомих файлів віддаю перевагу виведенню у “контекстному” форматі, коли відображаються не тільки змінені рядки, а й сусідні з ними.

Для порівняння більше двох файлів може підійти diff3.

Для порівняння двох або кількох файлів у 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, яка у наочному вигляді показує де і що змінилося у файлах.

Іноді виникає потреба порівняти кілька файлів між собою. Це може знадобитися під час аналізу різниці між кількома версіями конфігураційного файлу або просто для порівняння різних файлів. У Linux для цього є кілька утиліт як для роботи через термінал, так і в графічному інтерфейсі.

У цій статті ми розглянемо, як виконується порівняння файлів Linux. Розберемо найкорисніші способи, як терміналу, і у графічному режимі. Спочатку розглянемо, як виконувати порівняння файлу linux за допомогою утиліти 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. Ось її основні особливості:

  • Підтримка кількох форматів diff;
  • Підтримка порівняння файлу linux та каталогів;
  • Підтримка перегляду файлів diff;
  • Інтерфейс, що настроюється;
  • Створення та застосування патчів до файлів.

2. DiffMerge

DiffMerge - це кросплатформна програма для порівняння та об'єднання файлів. Дозволяє порівнювати два або три файли. Підтримується редагування рядків на льоту.

особливості:

  • Підтримка порівняння каталогів;
  • Інтеграція з переглядачем файлів;
  • Налаштовується.

3. Meld

Це легкий інструмент для порівняння та об'єднання файлів. Він дозволяє порівнювати файли, каталоги та виконувати функції системи контролю версій. Програма створена для розробників та має такі особливості:

  • Порівняння двох та трьох файлів;
  • Використання користувацьких типів та слів;
  • Режим автоматичного злиття та дії з боками тексту;
  • Підтримка Git, Mercurial, Subversion, Bazar та багато іншого.

4. Diffuse

Diffuse – ще один популярний і досить простий інструмент для порівняння та злиття файлів. Він написаний на Python. Підтримується дві основні можливості - порівняння файлів та керування версіями. Ви можете редагувати файли безпосередньо під час перегляду. Основні функції:

  • Підсвічування синтаксису;
  • Поєднання клавіш для зручної навігації;
  • Підтримка необмеженого числа скасування;
  • Підтримка Unicode;
  • Підтримка Git, CVS, Darcs, Mercurial, RCS, Subversion, SVK та Monotone.

5. XXdiff

XXdiff - це вільний і дуже потужний інструмент для порівняння та злиття файлів. Але програма має кілька мінусів. Це відсутність підтримки Unicode та редагування файлів.

особливості:

  • Поверхневе чи рекурсивне порівняння одного чи двох файлів та каталогів;
  • Підсвічування відмінностей;
  • інтерактивне об'єднання;
  • Підтримка зовнішніх інструментів порівняння, такі як GNU Diff, SIG Diff, Cleareddiff та багато іншого;
  • Розширюваність за допомогою сценаріїв;
  • Налаштовуваність.

6. KDiff3

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

  • Відображення відмінностей рядково та посимвольно;
  • Підтримка автозлиття;
  • Обробка конфліктів під час злиття;
  • Підтримка Unicode;
  • Відображення відмінностей;
  • Підтримка ручного вирівнювання.

Висновки

У цій статті ми розглянули, як виконується порівняння файлів 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. Ось її основні особливості:

  • Підтримка кількох форматів diff;
  • Підтримка порівняння файлу linux та каталогів;
  • Підтримка перегляду файлів diff;
  • Інтерфейс, що настроюється;
  • Створення та застосування патчів до файлів.

2. DiffMerge

DiffMerge - це кросплатформна програма для порівняння та об'єднання файлів. Дозволяє порівнювати два або три файли. Підтримується редагування рядків на льоту.

особливості:

  • Підтримка порівняння каталогів;
  • Інтеграція з переглядачем файлів;
  • Налаштовується.

3. Meld

Це легкий інструмент для порівняння та об'єднання файлів. Він дозволяє порівнювати файли, каталоги та виконувати функції системи контролю версій. Програма створена для розробників та має такі особливості:

  • Порівняння двох та трьох файлів;
  • Використання користувацьких типів та слів;
  • Режим автоматичного злиття та дії з боками тексту;
  • Підтримка Git, Mercurial, Subversion, Bazar та багато іншого.

4. Diffuse

Diffuse – ще один популярний і досить простий інструмент для порівняння та злиття файлів. Він написаний на Python. Підтримується дві основні можливості - порівняння файлів та керування версіями. Ви можете редагувати файли безпосередньо під час перегляду. Основні функції:

  • Підсвічування синтаксису;
  • Поєднання клавіш для зручної навігації;
  • Підтримка необмеженого числа скасування;
  • Підтримка Unicode;
  • Підтримка Git, CVS, Darcs, Mercurial, RCS, Subversion, SVK та Monotone.

5. XXdiff

XXdiff - це вільний і дуже потужний інструмент для порівняння та злиття файлів. Але програма має кілька мінусів. Це відсутність підтримки Unicode та редагування файлів.

особливості:

  • Поверхневе чи рекурсивне порівняння одного чи двох файлів та каталогів;
  • Підсвічування відмінностей;
  • інтерактивне об'єднання;
  • Підтримка зовнішніх інструментів порівняння, такі як GNU Diff, SIG Diff, Cleareddiff та багато іншого;
  • Розширюваність за допомогою сценаріїв;
  • Налаштовуваність.

6. KDiff3

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

  • Відображення відмінностей рядково та посимвольно;
  • Підтримка автозлиття;
  • Обробка конфліктів під час злиття;
  • Підтримка Unicode;
  • Відображення відмінностей;
  • Підтримка ручного вирівнювання.
Поділитися