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