Сравнение содержимого директорий с помощью приложения Meld в Linux
Оригинал: How to compare directories with Meld on Linux
Автор: Himanshu Arora
Дата публикации: 27 января 2017 г.
Перевод: А.Панин
Дата перевода: 10 марта 2017 г.
Мы уже рассмотрели приложение Meld с точки зрения начинающего пользователя (не обойдя стороной вопрос его установки), а также некоторые приемы использования данного приложения, которые могут быть полезны опытным пользователям. Если вы помните, в статье для начинающих пользователей мы упоминали о том, что Meld может использоваться как для сравнения файлов, так и для сравнения содержимого директорий. Теперь, когда мы рассмотрели вопрос сравнения файлов, пришло время рассмотреть вопрос сравнения содержимого директорий.
Но перед тем, как приступить к рассмотрению обозначенной функции приложения, следует упомянуть о том, что все инструкции и примеры, представленные в данной статье, были протестированы в системе Ubuntu 14.04 с Meld версии 3.14.2.
Сравнение содержимого директорий с помощью Meld
Для сравнения содержимого двух директорий с помощью Meld следует запустить данное приложение и воспользоваться его функцией под названием Сравнение каталогов ( Directory comparsion ).
После этого нужно выбрать директории, содержимое которых вы хотите сравнить.
По завершении выбора исследуемых директорий следует нажать кнопку Сравнить ( Compare ), в результате чего вы увидите содержимое двух директорий вместо областей редактирования, используемых в случае сравнения обычных файлов.
Разумеется, так как в данном случае осуществляется исследование содержимого директорий, вместо областей редактирования выводятся древовидные списки с файлами и директориями из выбранных директорий. И, как несложно заметить на иллюстрации выше, отличия в форме новых или измененных файлов выделяются с помощью различных цветов.
В соответствии с официальной документацией проекта Meld, каждый файл или директория из области сравнения имеет собственное состояние. Это состояние указывает на то, как определенный файл или директория отличается от соответствующего элемента из другой директории.
В следующей таблице, скопированной с веб-сайта рассматриваемого проекта, описываются различные состояния элементов при сравнении содержимого директорий в Meld.
Состояние | Отображение | Значение |
---|---|---|
Идентичный элемент | Обычный шрифт | Файл/директория являются идентичными во всех исследуемых директориях. |
Идентичный элемент после фильтрации | Наклонный шрифт | Файлы в исследуемых директориях отличаются. Но после применения фильтров они становятся идентичными. |
Модифицированный элемент | Полужирный шрифт синего цвета | Файлы в исследуемых директориях отличаются. |
Новый элемент | Полужирный шрифт зеленого цвета | Данный файл/директория существует в данной исследуемой директории, но отсутствует в других исследуемых директориях. |
Отсутствующий элемент | Обычный шрифт серого цвета с перечеркиванием | Данный файл/директория не существует в данной директории, но существует в других исследуемых директориях. |
Ошибочный элемент | Полужирный шрифт ярко-красного цвета с фоном желтого цвета | При сравнении данного файла произошла ошибка. Чаще всего ошибки связаны с правами доступа к файлам (то есть, у Meld нет прав для чтения их содержимого), а также с некорректным кодированием их имен. |
По умолчанию Meld отображает все элементы исследуемых директорий даже если они являются идентичными (то есть, между ними нет отличий). Однако, вы можете настроить инструмент таким образом, чтобы он не отображал такие файлы/директории путем нажатия на кнопку Одинаковые ( Same ) на панели инструментов — в результате эта кнопка будет деактивирована.
Это результат моего сравнения после деактивации кнопки Одинаковые .
Несложно заметить, что в данном случае отображаются лишь отличия между двумя директориями (новые и модифицированные файлы). Аналогично, при деактивации кнопки Новые ( New ) будут отображаться лишь модифицированные файлы. Поэтому вы можете свободно использовать три этих кнопки для выбора отличий, которые будут отображаться Meld после сравнения двух директорий.
Что касается отличий, вы можете переходить от одного отличия к другому с помощью кнопок со стрелками, направленными вверх и вниз, которые расположены над областью вывода содержимого директорий, а для показа областей редактирования содержимого двух файлов вы можете либо использовать двойной клик по отношению к имени любого файла, либо нажать на кнопку Сравнить ( Compare ), расположенную рядом с упомянутыми выше кнопками.
Примечание 1: если вы внимательно посмотрите на последнюю иллюстрацию, вы обнаружите цветные блоки слева и справа от представлений древовидных структур в окне Meld. Эти блоки по своей сути являются «простым представлением результатов сравнения». Для любых отличающихся файла или директории рядом с древовидным представлением создается небольшой цветной блок. Вы можете нажимать на каждый из таких блоков для непосредственного перехода к соответствующему элементу древовидного представления.
Примечание 2: хотя у вас всегда имеется возможность открытия файлов и их объединения в соответствии с вашими представлениями, при необходимости добавления всех отличных строк в соответствующий файл/директорию (то есть, приведения файлов/директорий к полностью идентичному содержанию), вы можете использовать кнопки Copy to Left и Copy to Right .
Например, вы можете выбрать файл или директорию на левой панели и нажать на кнопку Copy to Right для приведения соответствующего элемента на правой панели к идентичному содержанию.
Кроме того, существует раскрывающееся меню Фильтры , расположенное на панели инструментов сразу же после блока из трех кнопок Одинаковые , Новые и Измененные . С помощью него вы можете выбрать или отказаться от выбора типов файлов, чтобы Meld отображал или не отображал их в рамках древовидного списка в процессе сравнения директорий. Официальная документация описывает элементы этого списка, как «шаблоны имен файлов, которые не будут отслеживаться в процессе сравнения директорий».
Среди элементов упомянутого раскрывающегося списка имеются файлы резервных копий (Backups), файлы специфичных для операционной системы метаданных (OS-specific metadata), файлы систем контроля версий (Version Control), бинарные файлы (Binaries) и мультимедийные файлы (Media).
Эквивалент рассматриваемого списка также доступен после осуществления перехода в рамках меню окна приложения Вид — Типы файлов . Вы можете добавить новые элементы в данное меню (а также удалить существующие), осуществив переход в рамках главного меню приложения Настройки — Фильтры файлов .
Для создания нового фильтра вам придется использовать шаблоны командной оболочки. Ниже приведен список шаблонов командной оболочки, поддерживаемых Meld.
Шаблон | Совпадает с |
---|---|
* | Любыми символами (то есть нулем или большим количеством произвольных символов) |
? | Ровно одним произвольным символом |
[abc] | Любым из символов из квадратных скобок |
[!abc] | Любым символом, кроме приведенных в квадратных скобках |
Последовательностями символов «cat» и «dog» |
Наконец, важно знать, что регистр символов имен файлов играет важную роль, ведь Meld по умолчанию осуществляет их сравнение с учетом регистра символов. Это означает, что, к примеру, файлы с именами README и ReadMe будут рассматриваться приложением как не связанные друг с другом.
К счастью, Meld позволяет пользователю деактивировать данную функцию. Все, что для этого нужно — это открыть подменю Вид меню окна приложения и установить флажок Игнорировать регистр имени файла ( Ignore Filename Case ).
Заключение
Вы наверняка согласитесь с утверждением о том, что сравнение директорий с помощью Meld является не только не сложным, а вообще достаточно простым процессом. Единственным аспектом данного процесса, который может вызвать некоторые трудности, является использование и создание фильтров файлов, но рано или поздно вы освоите и его. Разумеется, все зависит от ваших потребностей.
Да, с помощью Meld вы также можете сравнивать по три директории одновременно, причем для этого нужно всего лишь установить флажок и выбрать с помощью соответствующего элемента управления третью директорию перед началом сравнения. Мы не обсуждали эту возможность в рамках данной статьи, но наверняка будем обсуждать ее в одной из следующих статей серии.
Источник
Чем сравнить две директории в Linux? С помощью Diff и Meld Tools
Для тех пользователей линукс мира, у кого как и у меня, время от времени возникает необходимость сравнения файлов и директорий, решил написать эту небольшую статью, о двух прекрасных, на мой взгляд, утилитах — утилита командной строки diff и утилита с графическим Meld Tools. Опережая реакцию неосиляторов и не желающих разбираться самостоятельно, ответственно заявляю, эта статья лишь ознакомительная, и не претендует на роль мануала, посему не буду подробно расписывать как сравнивать файлы и директории в Diff и Meld, тем более они имеют, на мой взгляд, интуитивно понятный интерфейс, разобраться в котором сможет даже бабушка, ну или дедушка. К слову сказать, в настоящее время у меня есть очень явный пример того, что линукс в целом и информационные технологии, в частности, всем возрастам покорны. В Manjaro группе в телеграмме, есть у нас товарищ, ему 61 год, с компьютером он познакомился в 55 лет, ныне пенсионер и всю жизнь проработал шахтёром. Так вот от него вопросов по настройке и помощи в линуксе слышно меньше, чем от 20-25 летних юнцов.
Что-то я ушёл от темы. Итак, обычно для того, чтобы сравнить два файла в Linux, я использую
. Если честно пользуюсь ей я ни потому, что я прям вот обожаю до ужаса этот волшебный мир консоли хотя да, он великолепен, а потому что diff есть «из коробки»в большинстве, если во всех дистрибутивах Linux, и если возникает необходимость сравнения файлов на чужом компьютере, то легче всего открыть терминал и использовать diff.
Так вот для сравнения двух каталогов достаточно выполнить простейшую команду:
diff -q directory-1/ directory-2/
Так это выглядит у меня Если вам необходимо сравнить рекурсивно, со сравнением поддиректорий, то используйте ключ -r.
Вторая утилита о которой хочу рассказать, это графическая утилита которая позиционируется, как инструмент визуального сравнения и слияния для рабочего стола GNOME, но конечно же, не будет преступлением использовать её и с другими окружениями рабочего стола. Устанавливается она простым вводом одной команды:
sudo pacman -S meld [Archlinux и его производные]
sudo apt install meld [Debian/Ubuntu и его производные]
sudo yum install meld [RHEL/CentOS и его производные]
sudo dnf install meld [Fedora 22+ и его производные]
Так выглядит её интерфейс
Как я написал выше, разберется в нём и стар и млад, учиться никогда не поздно. Благо в линуксе каждый найдёт для себя то, что ему нравится, кто-то фанатеет от консольки и работает только в ней, кто-то любит графические интерфейсы. Если у кого то возникнут вопросы, не стесняйтесь спрашивайте в комментариях всегда открыт к диалогу.
Источник
Разница между двумя каталогами в Linux
Я пытаюсь найти файлы, существующие в одном каталоге, но не в другом, я попытался использовать эту команду:
проблема с вышеуказанной командой в том, что она находит оба файла в dir1 а не dir2 а также файлы dir2 а не dir1 ,
Я пытаюсь найти файлы dir1 а не dir2 только.
вот небольшой пример того, как выглядят мои данные
другой вопрос на мой взгляд, как я могу найти файлы в dir1 а не dir2 или dir3 в одной команде?
14 ответов
пояснение:
diff -r dir1 dir2 показывает, какие файлы находятся только в dir1 и только в dir2, а также изменения файлов, присутствующих в обоих каталогах, если таковые имеются.
diff -r dir1 dir2 | grep dir1 показывает, какие файлы находятся только в dir1
awk для печати только имени файла.
Это должно сделать работу:
параметры объяснены (через diff (1) man page):
- -r — рекурсивно сравните все найденные подкаталоги.
- -q — вывод только в том случае, если файлы отличаются.
эта команда даст вам файлы, которые находятся в dir1 и не в директория dir2.
о знак, вы можете Google это, как подмена процесса.
хороший способ сделать это сравнение, чтобы использовать find С md5sum , потом diff .
использовать find чтобы перечислить все файлы в каталоге, вычислите хэш md5 для каждого файла и передайте его в файл:
выполните ту же процедуру в другом каталоге:
затем сравните результат двух файлов с «diff»:
эта стратегия очень полезна при сравнении двух каталогов находятся не на одной машине, и вам нужно убедиться, что файлы равны в обоих каталогах.
еще один хороший способ сделать эту работу-использовать git
С наилучшими пожеланиями!
Meld (http://meldmerge.org/) делает большую работу по сравнению каталогов и файлов внутри.
vim DirDiff плагин-еще один очень полезный инструмент для сравнения каталогов.
он не только перечисляет, какие файлы отличаются между каталогами, но также позволяет проверять/изменять с помощью vimdiff файлы, которые отличаются.
другой (возможно, более быстрый для больших каталогов) подход:
на sed команда удаляет первый компонент каталога благодаря)
Это немного поздно, но может кому-то помочь. Не уверен, что diff или rsync выплевывают только имена файлов в голом формате, как это. Спасибо plhn за предоставление этого приятного решения, которое я расширил ниже.
Если вы хотите только имена файлов, так что легко просто скопировать файлы, необходимые в чистом формате, вы можете использовать команду find.
предполагается, что dir1 и dir2 находятся в одной родительской папке. СЭД просто удаляет родительскую папку, чтобы вы могли сравнить яблоки с яблоками. Последний sed просто возвращает имя dir1.
Если вы просто хотите файлов:
аналогично для каталогов:
в принятом ответе также будут перечислены файлы, которые существуют в обоих каталогах, но имеют разное содержимое. Чтобы перечислить только файлы, существующие в dir1, вы можете использовать:
- diff-r dir1 dir2: сравнить
- grep ‘Only in’: получить строки, содержащие ‘Only in’
- grep dir1: получить строки, содержащие dir
неудовлетворенный всеми ответами, так как большинство из них работают очень медленно и производят излишне длинный вывод для больших каталогов, я написал свой собственный скрипт Python для сравнения двух папок.
В отличие от многих других решений, он не сравнивает содержимое файлов. Также он не входит в подкаталоги, которые отсутствуют в другом каталоге. Таким образом, вывод довольно лаконичен, и скрипт работает быстро.
или если вы хотите видеть только файлы из первого каталога:
P. S. Если вам нужно сравнить размеры файлов и файлов хэши для потенциальных изменений, я опубликовал обновленный скрипт здесь: https://gist.github.com/amakukha/f489cbde2afd32817f8e866cf4abe779
упрощенный способ сравнения 2 каталогов с помощью команды DIFF
diff имя файла.1 именем.2 > имя_файла.dat > > Enter
открыть именем.dat после завершения запуска
и вы увидите: Только в имени файла.1: имя.Два Только в: directory_name: name_of_file1 Только в: directory_Name: name_of_file2
kdiff3 имеет приятный интерфейс diff для файлов и каталогов.
Он работает под Windows & Linux.
GNU grep может инвертировать поиск с помощью опции -v . Это делает grep отчет о строках, которые не совпадают. С помощью этого вы можете удалить файлы в dir2 из списка файлов в dir1 .
опции -F -x рассказать grep для выполнения строкового поиска по всей строке.
это скрипт bash для печати команд для синхронизации двух каталогов
Источник