Меню

Bash сравнить содержимое двух файлов



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

Читайте также:  Фгос первого поколения сравнение

Источник

Как сравнить файлы по содержимому в Windows или Linux?

Веб-мастерам или владельцам сайтов часто бывает необходимо сравнить два файла по содержимому. Из этой статьи вы узнаете как сравнить два файла между собой. Здесь описаны все известные мне способы для сравнения текстовых файлов и скрипты (html, css, php и так далее).

Способ 1. Meld

Meld — графический инструмент для получения различий и слияния двух файлов, двух каталогов. Meld — визуальный инструмент сравнения и объединения файлов и каталогов для Linux. Meld ориентирован, в первую очередь, для разработчиков. Однако он может оказаться полезным любому пользователю, нуждающемуся в хорошем инструменте для сравнения файлов и директорий.

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

Способ 2. Сравнение содержимого двух файлов в программе WinMerge.

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

После установки, открываете пункт меню «Файл» — «Открыть». Выбираете файлы для сравнения. Для этого нажимаете на кнопку «Обзор» и выбираете файл. Выбрав файлы, нажимаете на кнопку «ОК».

В WinMerge можно также редактировать файлы. После закрытия окна сравнения, программа предложит сохранить изменения в файлах.

Способ 3. diff

diff — утилита сравнения файлов, выводящая разницу между двумя файлами.

Способ 4. Kompare

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

Способ 5. Сравнение файлов в программе Total Commander

В Total Commander существует инструмент сравнения файлов по содержимому, где можно не только сравнить содержимое, но и редактировать его и копировать из одного файла в другой.

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

Для внесения изменений в файл достаточно нажать на кнопку «Редактировать». В программе доступны функции копирования и отката, поиска и изменение кодировки. Если вы внесли изменения в файл, то после закрытия окна сравнения, будет предложено сохранить изменения.

Способ 6. Сравнение файлов в Notepad++

Notepad++ не умеет сравнивать файлы. Для появления этого функционала в Notepad++ нужно установить плагин «Compare».

Запускаете редактор – переходите в пункт меню «Плагины» — «Plugin Manager» — «Show Plugin Manager». В новом окне выбираете плагин «Compare» и жмёте кнопку «Install».

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

Способ 7. Сравнение файлов с помощью командной строки Windows

Сравнение с помощью командной строки Windows (cmd.exe) не позволяет редактировать файлы, но просто сравнить содержимое файлов, используя этот способ, вы можете.

Для вызова командной строки Windows перейдите «Пуск» — «Все программы» — «Стандартные» — «Командная строка» или нажмите клавиш «Windows+R», введите cmd и нажмите клавишу Enter.

Источник

Функция сравнения, которая сравнивает два текстовых файла в Unix

Мне было интересно, может ли кто-нибудь сказать мне, есть ли функция, доступная в unix, bash, которая сравнивает все строки файлов. Если они отличаются, он должен вывести true / false или -1,0,1. Я знаю, что эти функции cmp существуют в других языках. Я просматривал man pages, но безуспешно. Если он недоступен, может ли кто-то помочь мне найти альтернативное решение?

5 ответов

Вы можете сделать md5 на двух файлах, а затем сравнить результаты bash .

Читайте также:  Ecovacs или irobot сравнение

Нет Unix box здесь, чтобы проверить, но это должно быть правильно.

Существует простая cmp file file команда, которая делает именно это. Он возвращает 0, если они равны и 1, если они разные, поэтому его тривиально использовать в if s:

Надеюсь это поможет =)

Есть несколько способов сделать это:

  • cmp -s file1 file2 : Посмотрите на значение $? . Ноль, если оба файла совпадают или ненулевые в противном случае.
  • diff file1 file2 > /dev/null : Некоторые формы diff команды могут принимать параметр, который говорит ей ничего не выводить. Однако большинство этого не делает. В конце концов, вы используете diff , чтобы увидеть различия между двумя файлами. Опять же, код выхода (вы можете проверить значение $? будет 0, если файлы совпадают и ненулевые в противном случае.

Эти команды можно использовать в инструкции Shell if:

diff Команда создана специально для текстовых файлов. cmp Команда также должна работать со всеми двоичными файлами.

Источник

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

Бывает появляется необходимость сравнить содержимое двух файлов (например, конфигураций), чтобы выявить внесенные изменения. В линукс это можно сделать многими способами. Но в этой статье мы рассмотрим утилиту diff.

Diff — это пакет из стандартного репозитория, который работает в консоли. Его использовать очень просто.

$ diff options file1 file2

Можно так же сравнивать более двух файлов.

$ diff options file1 file2 file3 file4

Опции у diff следующие:

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

В выводе сравнения файлов указываются символы, которые обозначают следующее:

a — добавлено
d — удалено
c — изменено

> — строка совпадает
$ cat file1
1
2
3
a
b
c

Как видим, они отличаются. Попробуем их сравнить.

$ diff file1 file2
1a2
> a
3d3
3

Но мне нравится больше в две колонки:

$ diff -y file1 file2
1 1
> a
2 2
3

Как видно, diff — это очень удобный инструмент для сравнения двух и более файлов.

Источник

Построчное сравнение текстовых файлов в Linux с помощью утилиты diff — часть 2

Оригинал: How to do line-by-line comparison of files in Linux using diff command — Part II
Автор: Himanshu Arora
Дата публикации: 2 января 2017 г.
Перевод: А.Панин
Дата перевода: 13 февраля 2017 г.

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

Предполагая, что вы уже умеете работать с утилитой diff, в данной статье я предлагаю обсудить различные параметры командной строки этой утилиты на основе простых для понимания примеров.

Но перед тем, как перейти к рассмотрению параметров командной строки утилиты, следует упомянуть о том, что все примеры из данной статьи были протестированы в системе Ubuntu 14.04 с Bash версии 4.3.11(1) и diff версии 3.3.

Параметры командной строки утилиты diff

1. Вывод сообщения об идентичности файлов

По умолчанию в случае установления факта идентичности файлов утилита diff не выводит никаких сообщений.

Но существует специальный параметр командной строки ( -s ), в случае использования которого данная утилита будет сообщать об идентичности файлов:

2. Копируемый и унифицированный контексты вывода

Утилита diff поддерживает, по сути, два различных формата вывода. Копируемый контекст вывода (copied context) активируется с помощью параметра командной строки -c , а унифицированный контекст (unified context) — с помощью параметра командной строки -u . Это пример первого первого формата вывода:

Очевидно, что в случае использования копируемого контекста вывода отличающиеся строки маркируются с помощью символа восклицательного знака ( «!» ).

Читайте также:  Сравнение видов резки металла

А это пример унифицированного контекста вывода:

В случае использования этого формата вывода символы «+» и «-» перед строками соответствуют различиям в файлах: с помощью символа «-» маркируются строки из файла с именем file1, отсутствующие в файле с именем file2, а с помощью символа «+» — строки из файла с именем file2, которые должны быть добавлены в файл с именем file1.

3. Вывод сценария для текстового редактора ed

Утилита diff также может выводить последовательности команд, которые, в свою очередь, могут использоваться текстовым редактором ed для преобразования оригинального файла (в наших примерах с именем file1) в новый файл (с именем file2). Вы можете получить такой вывод следующим образом.

Предположим, что файлы с именами file1 и file2 имеют следующие различия:

Теперь используем параметр командной строки -e для генерации вывода, понятного текстовому редактору ed , после чего перенаправим этот вывод в отдельный файл:

В данном случае в файле будет сохранен следующий вывод утилиты:

После этого вам придется самостоятельно добавить команду «w» в конец этого файла:

Теперь вы можете выполнить следующую команду:

В результате файлы с именами file1 и file2 станут идентичными:

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

4. Генерация вывода в двух столбцах

Обычно diff генерирует вывод следующего формата:

Но существует специальный параметр командной строки ( -y ), который сообщает утилите о необходимости вывода данных в двух отдельных столбцах. А это пример такого вывода:

Очевидно, что при использовании данного формата вывода символ «|» используется для маркировки отличающихся строк.

5. Сокрытие идентичных строк

Если вы внимательно рассмотрите вывод из предыдущего примера (из расположенного выше раздела 4), вы обнаружите, что при использовании параметра командной строки -y утилита diff выводит не только измененные, но и идентичные строки обрабатываемых файлов. В том случае, если вам нужно убрать идентичные строки из вывода, вы можете воспользоваться параметром —suppress-common-lines .

6. Вывод имен функций языка C, содержащих измененный код

При использовании утилиты diff для сравнения двух файлов исходного кода на языке C может использоваться специальный параметр ( -p ), который сообщает утилите о необходимости вывода имен функций, в коде которых были обнаружены изменения. Например, предположим, что требуется сравнить два следующих файла исходного кода на языке C:

Файл с именем file1.c:

Файл с именем file2:

Это результат обычного сравнения этих файлов:

А это результат сравнения тех же файлов с использованием параметра -p :

Очевидно, что в случае использования параметра командной строки -p diff генерирует более подробный вывод с маркировкой измененных строк с помощью символа восклицательного знака ( «!» ).

7. Рекурсивное сравнение содержимого поддиректорий

Утилита diff также позволяет осуществлять рекурсивное сравнение содержимого поддиректорий, но этот режим работы не активирован по умолчанию. Я подразумевал, что при использовании данной команды:

утилита diff будет осуществлять сравнение лишь файлов из директорий верхнего уровня, но в случае использования параметра -r (активирующего режим рекурсивного сравнения файлов) будет осуществляться сравнение даже тех файлов, которые находятся в поддиректориях:

8. Обработка отсутствующих файлов как пустых

Утилита diff также поддерживает параметр, с помощью которого вы можете сообщить ей о том, что следует рассматривать отсутствующие файлы как пустые. Если вы сравните файлы с именами file1 и file3 (причем последнего файла не существует), по умолчанию diff выведет сообщение об ошибке:

В этом нет ничего плохого; по сути, данное поведение является вполне обоснованным. Но бывают случаи, когда необходимо избежать вывода сообщений об ошибках (возможно, при использовании diff в рамках сценариев командной оболочки), в которых вы можете воспользоваться параметром -N для обработки отсутствующих файлов как пустых и продолжения сравнения файлов.

Заключение

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

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

Источник