Вопрос или проблема
Как я могу рекурсивно сравнить 2 папки с одинаковой структурой, используя diff
или git diff
из командной строки bash
?
Чтобы сравнить 2 файла, мы используем команду diff. Как мы можем сравнить 2 директории? В частности, мы хотим узнать, какие файлы/подкаталоги являются общими, а какие есть только в одной директории, но не в другой:
diff dir1 dir2
если вас не интересуют различия файлов, используйте:
diff -q dir1 dir2 |sort
diff упорядочивает свой вывод по алфавиту по именам файлов/подкаталогов. Я предпочитаю группировать их по тому, являются ли они общими, и существуют ли они только в первой или второй директории. Вот почему я пропустил вывод команды diff через sort в вышеуказанной команде.
Обратите внимание, что по умолчанию diff не заходит в подкаталоги для сравнения файлов и подкаталогов на этом уровне. Чтобы изменить его поведение и рекурсивно спуститься в подкаталоги, добавьте -r.
diff -qr dir1 dir2 |sort
Надеюсь, это поможет.
Просто вы можете сделать:
git diff --no-index FOLDER1 FOLDER2
Используйте следующую команду:
diff -r folder1 folder2
Мой фаворит для быстрого взгляда:
diff -Ewburq folder1/ folder2/
Список имен файлов (игнорируя все виды изменений пробелов).
Чтобы увидеть весь дифф в хорошем просмотрщике (убрав опцию -q
):
diff -Ewbur folder1/ folder2/ | kompare -o -
Вы, вероятно, можете найти другие (лучшие?) инструменты для диффа (meld, k3diff и т.д.)
Если хотите, вы можете включить файлы ‘новые’ в набор с помощью -N.
diff -Nur directory1 directory2
Ответ или решение
Сравнение двух папок в Linux можно осуществить несколькими способами с использованием команд diff
и git diff
в командной строке bash. В этой статье мы подробно рассмотрим, как производить такое сравнение, учитывая все нюансы и возможности, которые предоставляет данное программное обеспечение.
Использование команды diff
Команда diff
предназначена для сравнения файлов и папок. Например, вы можете использовать следующую команду для сравнения двух папок:
diff dir1 dir2
Однако по умолчанию эта команда не заглядывает в подпапки. Чтобы выполнить рекурсивное сравнение и увидеть разницу в подкаталогах, добавьте ключ -r
:
diff -r dir1 dir2
Если вы хотите только увидеть, какие файлы и подкаталоги присутствуют в одной из папок, но отсутствуют в другой, и не интересуетесь содержимым файлов, используйте опцию -q
:
diff -qr dir1 dir2 | sort
Этот вариант отсортирует вывод по алфавиту, что упростит восприятие результатов. Если вам удобнее, вы можете сгруппировать файлы по их наличию в папках:
- Общие файлы: Присутствуют в обеих папках.
- Уникальные файлы: Присутствуют только в одной из папок.
Расширенные опции diff
Дополнительные параметры, увеличивающие удобство использования команды:
-E
: игнорирует различия в конце строк.-w
: игнорирует все пробелы.-b
: игнорирует изменения в количестве пробелов.-u
: выводит результат в удобочитаемом формате (собирая изменения).
Таким образом, для получения более четкого вывода может быть полезна следующая команда:
diff -Ewbur dir1 dir2
Если вы хотите визуализировать изменения с помощью графического интерфейса, можно передать вывод команды diff
в такие инструменты, как kompare
или meld
. Пример:
diff -Ewbur dir1 dir2 | kompare -o -
Использование git diff
Если папки содержат файлы в формате, управляемом Git, вы можете использовать команду git diff
. Эта команда особенно полезна, если вы хотите увидеть изменения между папками, которые не являются частью репозитория Git:
git diff --no-index FOLDER1 FOLDER2
Это позволяет вам использовать различные функции Git (например, отображение отличий) для папок, которые не связаны с конкретным проектом Git.
Заключение
Сравнение папок в Linux — это мощный инструмент, который может значительно облегчить работу по анализу изменений в файловой системе. Команды diff
и git diff
предлагают множество опций для выполнения этого процесса, что делает их гибкими и высокоэффективными средствами для разработчиков и системных администраторов. комбинируя различные параметры и инструменты, вы сможете добиться самых оптимальных результатов при анализе различий между директориями.