Сравнение двух каталогов linux

Разница между двумя каталогами в 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

Читайте также:  Updating firefox linux mint

упрощенный способ сравнения 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 для печати команд для синхронизации двух каталогов

Источник

Сравнение файлов в 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. Кроме сравнения файлов утилита поддерживает сравнение каталогов и позволяет создавать и применять патчи к файлам.

Читайте также:  Драйвера для сетевой карты windows 10 pro 64 bit

2. Meld

Это легкий инструмент для сравнения и объединения файлов. Он позволяет сравнивать файлы, каталоги, а также выполнять функции системы контроля версий. Программа создана для разработчиков и позволяет сравнивать до трёх файлов. Можно сравнивать каталоги и автоматически объединять сравниваемые файлы. Кроме того поддерживаются такие системы контроля версий, как Git.

3. Diffuse

Diffuse — еще один популярный и достаточно простой инструмент для сравнения и слияния файлов. Он написан на Python 2. Поэтому в современных версиях Ubuntu программу будет сложно установить. Поддерживается две основные возможности — сравнение файлов и управление версиями. Вы можете редактировать файлы прямо во время просмотра.

4. KDiff3

KDiff3 — еще один отличный, свободный инструмент для сравнения файлов в окружении рабочего стола KDE. Он входит в набор программ KDevelop и работает на всех платформах, включая Windows и MacOS. Можно выполнить сравнение до трех файлов Linux или даже сравнить каталоги. Кроме того, есть поддержка слияния и ручного выравнивания.

5. TkDiff

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

Выводы

В этой статье мы рассмотрели как выполняется сравнение файлов linux с помощью терминала, как создавать патчи, а также сделали небольшой обзор лучших графических утилит для сравнения файлов. А какие инструменты для сравнения используете вы? Напишите в комментариях!

Источник

Чем сравнить две директории в 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+ и его производные]

Так выглядит её интерфейс

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

Читайте также:  Windows планшет с мощной видеокартой

Источник

Разница между двумя каталогами в Linux

Я пытаюсь найти файлы, существующие в одном каталоге, но не в другом, я попытался использовать эту команду:

Проблема с приведенной выше командой заключается в том, что она находит файлы dir1 , но не в dir2 , а также файлы в dir2 , но не в dir1 ,

Я пытаюсь найти файлы в dir1 , но не только в dir2 .

Вот небольшой пример того, что мои данные выглядят как

Еще один вопрос, как я могу найти файлы в dir1 , но не в dir2 или dir3 в одной команде?

15 ответов

Объяснение:

diff -r dir1 dir2 показывает, какие файлы находятся только в каталоге dir1 и только в dir2, а также изменения файлов, присутствующих в обоих каталогах, если они есть.

diff -r dir1 dir2 | grep dir1 показывает, какие файлы находятся только в dir1

awk для печати только имени файла.

Это должно сделать работу:

Опции объяснены (с помощью справочной страницы diff (1)):

  • -r — Рекурсивно сравнить все найденные подкаталоги.
  • -q — -q только файлы различаются.

Эта команда даст вам файлы, которые находятся в каталоге dir1, а не в каталоге dir2.

О знаке , вы можете использовать его как «подстановка процесса».

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

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

Сделайте ту же процедуру в другом каталоге:

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

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

Другим хорошим способом выполнения задания является использование git

Meld (http://meldmerge.org/) отлично справляется с сопоставлением каталогов и файлов внутри.

vim Плагин DirDiff — еще один очень полезный инструмент для сравнения каталогов.

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

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

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

Или если вы хотите видеть только файлы из первого каталога:

PS Если вам нужно сравнить размеры файлов и хэши файлов для потенциальных изменений, я опубликовал обновленный сценарий здесь: https://gist.github.com/amakukha/f489cbde2afd32817f8e866cf4abe779

Другой (возможно, более быстрый для больших каталогов) подход:

Команда sed удаляет первый компонент каталога благодаря сообщению Эрика)

В принятом ответе также будут перечислены файлы, которые существуют в обоих каталогах, но имеют различный контент. Чтобы перечислить ТОЛЬКО файлы, которые существуют в каталоге dir1, вы можете использовать:

  • diff -r dir1 dir2: сравнить
  • grep ‘Только в’: получите строки, содержащие ‘Only in’
  • grep dir1: получить строки, содержащие dir

Это немного поздно, но может помочь кому-то. Не уверен, что diff или rsync выдают только имена файлов в таком формате. Спасибо пнну за то, что я дал это прекрасное решение, которое я расширил ниже.

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

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

Источник

Оцените статью