Инструмент сравнения файлов и каталогов?

149

Я ищу то, что будет сравнивать каталоги и файлы, как Beyond Compare для Windows.

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

DevelopingChris
источник
Вы хотите только список файлов или фактическое содержимое каждого файла?
Мартин Уединг
Мне нужен список файлов и, если возможно, различное содержимое между файлами с одинаковым путем.
isoman
2
Было бы удобно, если бы инструмент GUI позволял скрывать папки и файлы, которые идентичны . Это позволило бы сконцентрироваться на нечетных папках и файлах. Кто-нибудь знает инструмент, который поддерживает эту функцию?
JJD
Посмотрите на унисон . Вне сравнения используется подход «единый магазин делает все», в то время как unison фокусируется на обработке обхода дерева, сохранении состояния и распространении изменений, покрывая функции Beyond Compare , делегируя такие вещи, как diff, 3-way merge и т. Д., Независимо от того, что у вас есть. любимая программа, работающая на уровне файлов. Unison - это бесплатное, очень надежное и зрелое программное обеспечение, способное быстро обнаруживать и синхронизировать огромные деревья через сеть между различными ОС и т. Д. Сначала прочтите документацию, особенно в Windows.
Стефан Гурихон
В emacs есть инструмент сравнения каталогов. Как и все, что есть в emacs, eye candy - это, ну, в общем, «что даже означает eye candy?», Но он показывает контекстную помощь с ключами, позволяет с помощью нескольких нажатий клавиш выполнять рекурсивный анализ, скрывать идентичные файлы или даже подкаталоги, интерактивно выбирать файлы для отображения цвета. -кодированные различия с различными параметрами, интерактивно объединять, распространять или выполнять произвольные изменения файлов, легко переходить к следующему файлу или директории, отслеживая состояние, со всеми обычными средствами редактирования.
Стефан Гурихон

Ответы:

175

сливатьсяустановить смесь

Meld - это инструмент, который может сравнивать и объединять файлы и каталоги. Это GUI аналог стандартных инструментов diff установить диффузорыи patch установить патчинструментов командной строки. (Смотрите man diff и man patch для более подробной информации)

введите описание изображения здесь

Кроме того, многие системы контроля версий (такие как bzr установить bzr-gtkили git установить мерзавец) имеют возможность создавать различия между версиями.

dv3500ea
источник
2
Мелд удивительно. Я использую его в качестве источника контроля различий.
Matt Joiner
12
Только что попробовал на большую папку - 4 ГБ, 2000 файлов. Функциональность слияния - по желанию. Но для этой папки слияние чрезвычайно медленное, и пользовательский интерфейс не отвечает (блокирует). Используя rsync сейчас.
geekQ
1
Также отлично работает при сравнении текстовых файлов рядом, или даже скопировать вставки. Лучший интерфейс, который я видел!
Стефан Рогин
@geekQ как быстрая альтернатива, способная мгновенно обрабатывать столько папок, сколько вам нужно, см. beyond compareниже. превосходит
meld
Meld вылетает каждый раз, когда я хочу выбрать папку: / У меня есть
последняя
44

Дифф твой друг.

diff -ur path1 path2

Это позволит сравнить все файлы, которые являются общими для path1 и path2.

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

Richm
источник
1
Установлено colordiffи использованоcolordiff -ur path1 path2
warvariuc
Не работает в Cygwin.
Томаш Зато
22

«Beyond Compare» доступно и для Linux.

Проверьте их URL для загрузки: http://www.scootersoftware.com/download.php

aneeshep
источник
Beyond Compare особенно полезен при выполнении ssh (с ключом или паролем) для удаленного хоста и сравнении его с локальной копией.
Брианлмерритт
13

Используйте diffкоманду:

diff -u file1 file2

diff -uвыбирает формат с несколькими строками контекста. Равнина diff file1 file2только перечисляет отличающиеся линии. Есть еще много опций для управления форматом вывода, игнорирования различий только с пробелами и т. Д.

Если вы хотите записать вывод в файл, перенаправьте его:

diff -u file1 file2 >file1-file2.diff
жилль
источник
12

Гном командующийустановить Gnome Commander

Интерфейс может быть не очень сексуальным, но он очень мощный!

альтернативный текст

И если вы привыкли к другому * Commander (например, Нортону или тому подобное), вы не будете потеряны.

Гюйгенс
источник
1
Я не использовал его для сравнения 2 файлов, но я использовал его, чтобы сказать, какие файлы отличались при сравнении с каталогами. Это особенно полезно при сортировке фотографий ;-)
Huygens
10

Инструменты командной строки

Вдохновленный этой записью в блоге .

разница

Список разных файлов:

diff -qr folder1 folder2

Листинг также содержание:

diff -Naur folder1 folder2

Rsync

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

rsync -rvnc --delete folder1 server:/path/to/folder2

Вы можете пропустить, cесли хотите сравнить файлы на основе временных отметок и размеров файлов, чтобы ускорить все:

rsync -rvn --delete folder1 server:/path/to/folder2
lumbric
источник
9

Krusaderустановить Krusader

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

Krusader

Чтобы сравнить содержимое файла, вы просто помечаете два файла, выбираете «файл»> «сравнить содержимое», и они сравниваются по буквам. инструментом сравнения по умолчанию, используемым krusader, является инструмент KDE по умолчанию Kompare . Вы можете настроить krusader на использование любого другого инструмента сравнения, например, одного из приведенных выше.

Это самое полное решение, которое я когда-либо нашел, и это очень удобно. И он поддерживает все функции keybindungs, используемые Midnight Commander (синтаксис Norton Commander).

Piedro
источник
Вы также можете использовать «Инструменты -> Синхронизировать каталоги», чтобы получить рекурсивное представление об изменениях файлов двух панелей каталогов.
Ангелос Пикулас
к сожалению, синхронизатор в krusader не поддерживается: bugs.kde.org/show_bug.cgi?id=270150#c7 . Есть ли альтернатива, которая активно поддерживается?
rubo77
1
@ rubo77: эта ошибка была исправлена.
MIVK
9

KDiff3 установить kdiff3

Это графический интерфейс для diff для пользователей KDE (или если вы не возражаете против использования приложений Qt).

kdiff3

Существует также dirdiff установить Dirdiff для каталогов.

tinhed
источник
6

Может быть, Мелд это то, что вы ищете. Или вот некоторые другие альтернативы.

sagarchalise
источник
4

Unison - это быстрый инструмент синхронизации файлов, использующий алгоритм rsync и позволяющий просматривать различия перед обновлением между двумя местоположениями, будь то удаленное или локальное.

Рог
источник
4

Я узнал о hashdeep две недели назад. И у этого есть некоторые сильные преимущества:

  • В отличие от этого meld, он хорошо работает для очень больших папок. Там, где meldстановится очень медленно и пользовательский интерфейс не отвечает (блокируется), hashdeep просто работает с постоянной скоростью
  • В отличие от rsynchashdeep обнаруживает перемещенные файлы - файлы с одинаковым содержимым, просто в другом каталоге.

Подробный вывод выглядит так:

...
foo/bar.txt: Known file not used
x/foo/M0824_2L.JPG: Moved from y/P1010998.JPG

hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 6233
Files partially matched: 0
            Files moved: 3695
        New files found: 19257
  Known files not found: 4713
geekQ
источник
4

Хороший способ сделать это сравнение - использовать « find » с « md5sum », а затем « diff ».

Пример:

Используйте find, чтобы вывести список всех файлов в каталоге, затем вычислить хэш md5 для каждого файла и передать его в файл:

$find /dir1/ -type f -exec md5sum {} \; > dir1.txt

Проделайте ту же процедуру с другим каталогом:

$find /dir2/ -type f -exec md5sum {} \; > dir2.txt

Затем сравните результат двух файлов с «diff»:

$diff dir1.txt dir2.txt

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

Еще один хороший способ сделать работу - использовать git

git diff --no-index dir1/ dir2/

С уважением!

Adail Junior
источник
3

Попробуйте также FreeFileSync . Имеет неплохой интерфейс, приемлемую скорость сравнения, хорошую фильтрацию результатов сравнения, различные способы синхронизации. Он поставляется с инструментом мониторинга папок (RealTimeSync), который может запускать FreeFileSync (фактически любую команду или сценарий) при изменении этой конкретной папки (или папок) или файлов внутри. Действительно стоит попробовать.

Больше информации об этом здесь или здесь , где у вас есть PPA тоже

Со своей страницы ключевые особенности:

Сравните файлы (побайтно или по дате) и синхронизируйте их.

Без ограничений: можно синхронизировать произвольное количество файлов.

Поддержка Юникода.

Сетевая поддержка.

Встроенная поддержка очень длинных имен файлов (более MAX_PATH = 260 символов).

База данных синхронизации для распространения удаленных файлов и обнаружения конфликтов

Поддержка нескольких пар папок с определенной конфигурацией

Полная поддержка символических ссылок Windows / Linux и точек соединения Windows.

Легкий и легко доступный интерфейс: высоко оптимизирован для скорости и огромных массивов данных.

Алгоритмы написаны на C ++ полностью.

Все показатели прогресса оптимизированы для максимальной производительности!

Создание пакетных заданий для автоматической синхронизации с или без графического интерфейса.

Фокус на удобстве использования:

Только необходимый функционал в пользовательском интерфейсе: нет перегруженных меню или значка джунглей.

Выберите все папки с помощью перетаскивания.

Последняя использованная конфигурация и настройки экрана сохраняются автоматически.

Поддерживайте и загружайте различные конфигурации с помощью перетаскивания, кнопки загрузки или командной строки.

Дважды щелкните, чтобы запустить внешнее приложение (например, показать файл в проводнике Windows)

Скопируйте и вставьте все данные сетки в виде текста

Удалите лишние / временные файлы прямо в основной сетке.

Щелкните правой кнопкой мыши контекстное меню.

Полная информация о состоянии и отчеты об ошибках

Сортировать списки файлов по имени, размеру или дате.

Поддержка файлов размером более 4 ГБ.

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

Игнорируйте каталоги "\ RECYCLER" и "\ System Volume Information" с фильтром по умолчанию. (Только для Windows)

Локализованные версии доступны для многих языков.

Удалить до копирования. Избегайте нехватки места на диске для больших заданий синхронизации.

Функциональность фильтра для включения / исключения файлов из синхронизации (без необходимости повторного сравнения!).

Включить / исключить определенные файлы из синхронизации временно.

Автоматически обрабатывать изменения летнего времени на томах FAT / FAT32.

Доступна портативная версия (выбирается через установщик).

Родная 64-битная версия.

Проверьте наличие обновлений в FreeFileSync автоматически.

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

Создавайте регулярные резервные копии с макросами% time%,% date% в именах каталогов

Копирование файлов и папок время создания / доступа / изменения при синхронизации

Усовершенствованная стратегия блокировки, позволяющая использовать несколько процессов синхронизации (например, несколько устройств записи, один и тот же сетевой ресурс)

Я бы добавил, что он может управлять удаленными файлами, перемещая их в корзину или папку, указанную пользователем. Отметим один недостаток: программная документация в основном ориентирована на Windows, а не на Linux. Но это делает свою работу хорошо.

Лури
источник
3

Вы можете использовать diffuse:

sudo apt-get install diffuse
diffuse file1 file2
metdos
источник
2
Я часто использую Diffuse для одной функции убийцы - возможность вручную устанавливать привязки слияния. Это не делает каталоги (пока), но для отдельных и грязных различий, функция якорей является удивительной.
Sk606
2

Вы можете попробовать смесь .

Это репозитории и предоставляет графический интерфейс для сравнения файлов или папок.

Павлос Г.
источник
1
Meld - это графический интерфейс для diff, кстати.
Марко Чеппи
1

Eclipse IDE немного тяжеловесен, если вы просто проводите сравнение, но он, между прочим, хорошо справляется с этой задачей. Вы можете выбрать 2 проекта, пути или файлы и сравнить их друг с другом, а также синхронизировать с серверами контроля версий.

Рог
источник
1

ИМХО FreeFileSync очень хорош и полезнее, чем Meld. Он быстрый и стабильный, может выполнять синхронизируемые по стоимости стоимостные синхронизации, а также может экспортировать результаты сравнения в CSV-файл.

Ссылка на ланчпад

Реза
источник
0

Кроссплатформенность, простота, отсутствие суеты и функции сохранения профиля делают Jfilesync моим лучшим выбором

ночной бездельник
источник
0

Сравнивать файлы

File_1.txt
Line1
Line2

File_2.txt
Line1
Line 2

Вы можете использовать команду cmp:

cmp -b "File_1.txt" "File_2.txt"

выход будет

a b differ: byte 11, line 2 is  62 2  40  

Для сравнения dirs (ваша потребность):

Вы можете использовать команду diff :

diff -r --brief dir1 dir2

man diff

  -r, --recursive
              recursively compare any subdirectories found

   -q, --brief
          report only when files differ
Maythux
источник