- Как сравнить различия между каталогами (Linux)
- В linux, как сравнить два каталога только по имени файла и получить список результатов, которые не совпадают
- 4 ответа
- Примере
- Альтернативный выход
- Пример с именами файлов и каталогов, которые включают пробелы
- Ограничение
- Чем сравнить две директории в Linux? С помощью Diff и Meld Tools
- Сравнение файлов в Linux (команда diff)
- Синтаксис команды diff
- Опции команды diff
- Примеры использования команды diff
- Сравнение двух текстовых файлов
- Сравнение директорий, содержащих текстовые файлы
- Заключение
- Инструмент сравнения файлов и каталогов?
- сливаться
- Инструменты командной строки
- разница
- Rsync
- Krusader
- KDiff3
Как сравнить различия между каталогами (Linux)
У меня есть две директории — одна из более ранней резервной копии и вторая из новейшей резервной копии. Как сравнить, какие изменения были внесены в файлы в каталоге из новейшей резервной копии в Linux? Также, как мне отобразить изменения, например, в текстовых и php файлах — я думаю о чем-то вроде истории изменений в Википедии, где вы видите старую версию на одной стороне экрана и самую новую версию на другой, и изменения подсвечиваются. Как мне достичь чего-то подобного?
Редактировать: Как я могу также сравнить удаленный каталог с локальным?
Из справочной страницы diff:
Если оба файла from-file и to-file являются каталогами, diff сравнивает соответствующие файлы в обоих каталогах в алфавитном порядке; это сравнение не является рекурсивным, если не задана опция -r или —recursive. diff никогда не сравнивает фактическое содержимое каталога, как если бы это был файл. Файл, который полностью указан, может не быть стандартным вводом, потому что стандартный ввод является безымянным и понятие «файл с тем же именем» не применяется.
Итак, для сравнения каталогов: diff —brief -r dir1 dir2
Чтобы сравнить файлы рядом: diff —side-by-side file1 file2
- мы находимся www1 , сравнивая с удаленным www2
- есть аутентификация с открытым ключом от локального www1 к удаленному www2
- мы сравниваем как одного и того же пользователя на локальном www1 и удаленном www2
Вы действительно хотите объединить мощность, rsync чтобы уменьшить потребление полосы пропускания с мощностью, diff чтобы дать вам гибкие, ну и отличия.
Так что-то вроде этого:
Я думаю, вы могли бы немного подправить это, если бы вы делали это часто, rsync а не cp в первой строке — очевидно, в последней строке у вас есть все возможности diff для форматирования, как вам нравится. Вероятно, с у в случае ОП
Недостатком этого подхода является то, что вы в конечном итоге используете вдвое больше локального пространства, но при этом менее чем на 1 долл. / Гиг, кого это волнует?
Делайте diff old_dir new_dir > diff.txt для параллельных различий на одном сервере.
Для удаленных файлов:
Например: ABC — это существующий сервер, а XYZ — ваш удаленный сервер, а имя каталога — 123.
Шаг 1: Переименуйте существующий каталог 123 на ABC Server как 123_ABC.
Шаг 2: Создайте новый каталог на сервере ABC:
Шаг 3: Скопируйте все файлы из каталога 123 на сервере XYZ в каталог 123_XYZ на сервере ABC:
Это скопирует все файлы из каталога на вашем XYZ-сервере в каталог ABC server / 123_XYZ.
Шаг: 4: Сделайте различие между обоими каталогами:
Теперь перейдите на сервер ABC и выполните различие между 123_ABC и 123_XYZ.
Команда выше сохранит результаты diff в diff.txt по тому же пути.
Вы можете сравнить различия тогда.
AIDE Advanced Intrusion Detection Environment (AIDE) является проверка целостности файлов для операционных систем UNIX. Его целью является предоставление отчетов о целостности данных в поддерживаемых файловых системах. Несколько раз запустив AIDE на целевом хосте, вы можете определить, какие файлы меняются. Запустив AIDE несколько раз на разных хостах, вы можете определить, какие файлы и разрешения отличаются. Затем используйте инструмент gui diff для указанных «разных» файлов.
Или используйте инструмент gui diff, такой как meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff или xxdiff. Большинство из них будет делать различия в каталогах в дополнение к различиям в файлах. Вам нужно будет смонтировать удаленный диск, используя NFS, SMBFS или SSHFS, как уже упоминали другие.
Или вы можете использовать два файла с выходом списка файлов. А затем сравните эти два файла. Например:
Загрузите один из файлов.
Используйте diff ( diff -y remote-files local-files > diff-files ), чтобы сравнить их рядом. Откройте diff-файлы и проверьте его. Каждая строка с> означает другой файл.
Источник
В linux, как сравнить два каталога только по имени файла и получить список результатов, которые не совпадают
Я хотел бы знать, как сравнить два каталога (не рекурсивно) только по имени файла (игнорировать расширение), чтобы увидеть разницу. Например, если у меня есть список A и B, я хочу знать, что присутствует в A, а не в B.
В настоящее время я обрабатываю некоторые изображения. В одном каталоге у меня есть исходные файлы с расширением .tiff, а в другом — обработанные файлы с расширением .png. Имена файлов в обоих каталогах совпадают, но отличается только расширение (например, один файл называется foo.tiff в каталоге A, и он называется foo.png в каталоге B).
Пытаюсь найти, какие файлы еще не обрабатывались.
4 ответа
Если я вас правильно понял, вам понадобится следующий скрипт:
Он показывает файлы, присутствующие в первой папке, но отсутствующие во второй. как это:
Использование команды diff может сделать это за вас.
Надеюсь это поможет.
-q Сообщать только о различиях файлов, но не подробности различий.
-r При сравнении каталогов рекурсивно сравнивать все найденные подкаталоги.
Сначала создадим вспомогательную функцию:
Если вы запустите getfiles dirname , он вернет отсортированный список файлов в этом каталоге без имени каталога и без какого-либо расширения. Параметр -maxdepth 1 означает, что find не будет выполнять рекурсивный поиск.
Теперь сравним каталоги файлов A и B :
Вывод в обычном формате diff . Поскольку можно использовать любые стандартные параметры diff, выходной формат достаточно гибкий.
Примере
Вот примерный каталог A и B , в каждом из которых есть один файл, которого нет в другом:
Выходные данные правильно идентифицируют (а) что B имеет файл baz , которого нет в A и (б) что A имеет файл qux , который отсутствует в B .
Альтернативный выход
Предположим, что мы просто хотим провести одностороннее сравнение и выяснить, какие файлы в B также отсутствуют в A . В этом случае можно использовать grep :
Здесь используются следующие параметры:
-v указывает grep исключить совпадающие строки
-x указывает grep соответствовать только целым строкам
-F сообщает grep , что шаблоны являются фиксированными строками, а не регулярными выражениями.
Пример с именами файлов и каталогов, которые включают пробелы
Рассмотрим эти файлы:
Ограничение
Если в каком-либо из ваших имен файлов есть символы новой строки, это даст неверные результаты. По крайней мере, для формы grep это можно было бы распространить на более общий случай.
Источник
Чем сравнить две директории в 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 (команда diff)
Для сравнения двух или нескольких файлов в Linux есть команда 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 удобно перенаправить в файл с расширением diff . Большинство текстовых редакторов в Linux, например Gedit, распознают этот файл и подсвечивают его синтаксис. Чтобы направить результат сравнения в файл changes.diff нужно использовать символ перенаправления потока (>):
Сравнение директорий, содержащих текстовые файлы
Рассмотрим пример сравнения двух директорий ( mydir1 и mydir2 ), которые содержат текстовые файлы. Основное отличие здесь от примера выше состоит в том, что мы добавим опцию -r , означающую рекурсивный обход файлов в директориях.
Теперь предположим, что в директориях, в которых мы сравниваем файлы, находится много «мусора», который мы не должны сравнивать. Создадим файл excludeFiles и запишем в него шаблоны и названия файлов, которые мы не должны сравнивать. Например, содержимое excludeFiles может иметь вид:
Теперь укажем команде diff, чтобы она использовала наш файл excludeFiles при сравнении каталогов:
Таким образом, мы сравниваем файлы, имена которых не попадают под шаблоны в файле excludeFiles , например, vasya.exe или ChangeLog12 .
Добавим еще несколько опций, которые описаны выше, чтобы улучшить результат сравнения:
Мы сравниваем файлы в директориях mydir1 и mydir2 , игнорируя изменения, связанные с добавлением пустых строк, пробелов, табуляции, а также используем шаблоны имен файлов в excludeFiles , чтобы исключить из сравнения ненужные файлы.
Заключение
Дополнительную информацию по использованию команды diff в вашей системе Linux вы можете получить, выполнив команду:
Также существуют программы, которые позволяют сравнивать файлы, используя графический интерфейс. Например, программа Meld, которая в наглядном виде показывает где и что изменилось в файлах.
Источник
Инструмент сравнения файлов и каталогов?
Я ищу то, что будет сравнивать каталоги и файлы, как Beyond Compare для Windows.
В основном это для контроля версий, но мне нужно использовать его и для развертывания.
сливаться
Meld — это инструмент, который может сравнивать и объединять файлы и каталоги. Это GUI аналог стандартных инструментов diff и patch инструментов командной строки. (Смотрите man diff и man patch для более подробной информации)
Кроме того, многие системы контроля версий (такие как bzr или git ) имеют возможность создавать различия между версиями.
Это позволит сравнить все файлы, которые являются общими для path1 и path2.
Если вы измените -ur на, -urN то это также покажет содержимое файлов, которые присутствуют только в одном из путей.
«Beyond Compare» доступно и для Linux.
diff -u выбирает формат с несколькими строками контекста. Равнина diff file1 file2 только перечисляет отличающиеся линии. Есть еще много опций для управления форматом вывода, игнорирования различий только с пробелами и т. Д.
Если вы хотите записать вывод в файл, перенаправьте его:
Интерфейс может быть не очень сексуальным, но он очень мощный!
И если вы привыкли к другому * Commander (например, Нортону или тому подобное), вы не будете потеряны.
Инструменты командной строки
разница
Список разных файлов:
Листинг также содержание:
Rsync
Если два каталога не находятся на одном компьютере, rsync возможно, самое простое решение. Обычно rsync используется для синхронизации каталогов, но вы можете запустить его в подробном и сухом режимах, поэтому он будет отображать только те файлы, которые он должен будет изменить.
Вы можете пропустить, c если хотите сравнить файлы на основе временных отметок и размеров файлов, чтобы ускорить все:
Krusader
Krusader — это бесплатный инструмент (доступен в Центре программного обеспечения), который показывает содержимое папок в сравнении, и вы можете синхронизировать с множеством различных опций. Вы можете фильтровать при синхронизации и сравнении.
Чтобы сравнить содержимое файла, вы просто помечаете два файла, выбираете «файл»> «сравнить содержимое», и они сравниваются по буквам. инструментом сравнения по умолчанию, используемым krusader, является инструмент KDE по умолчанию Kompare . Вы можете настроить krusader на использование любого другого инструмента сравнения, например, одного из приведенных выше.
Это самое полное решение, которое я когда-либо нашел, и это очень удобно. И он поддерживает все функции keybindungs, используемые Midnight Commander (синтаксис Norton Commander).
KDiff3
Это графический интерфейс для diff для пользователей KDE (или если вы не возражаете против использования приложений Qt).
Существует также dirdiff для каталогов.
Может быть, Мелд это то, что вы ищете. Или вот некоторые другие альтернативы.
Unison — это быстрый инструмент синхронизации файлов, использующий алгоритм rsync и позволяющий просматривать различия перед обновлением между двумя местоположениями, будь то удаленное или локальное.
Я узнал о hashdeep две недели назад. И у этого есть некоторые сильные преимущества:
- В отличие от этого meld , он хорошо работает для очень больших папок. Там, где meld становится очень медленно и пользовательский интерфейс не отвечает (блокируется), hashdeep просто работает с постоянной скоростью
- В отличие от rsync hashdeep обнаруживает перемещенные файлы — файлы с одинаковым содержимым, просто в другом каталоге.
Подробный вывод выглядит так:
Хороший способ сделать это сравнение — использовать « find » с « md5sum », а затем « diff ».
Используйте find, чтобы вывести список всех файлов в каталоге, затем вычислить хэш md5 для каждого файла и передать его в файл:
Проделайте ту же процедуру с другим каталогом:
Затем сравните результат двух файлов с «diff»:
Эта стратегия очень полезна, когда два сравниваемых каталога не находятся на одном компьютере, и вам необходимо убедиться, что файлы в обоих каталогах совпадают.
Еще один хороший способ сделать работу — использовать git
Попробуйте также 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. Но это делает свою работу хорошо.
Источник