Pretty diff, a language aware file comparison tool, beautifier, minifier and parser

8 ответов

34

Следующее (если вы замените первый каталог для каталога1 и второй для directory2) должно делать то, что вы ищете и быстро:

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

Это может упасть (произвести wierd output), если у вас есть возврат каретки в некоторых именах каталогов, но не в других.

22

Я обычно использую для этой задачи:

ОЧЕНЬ ОСТОРОЖНО , чтобы всегда использовать , aka , или он будет синхронизировать (изменять содержимое) каталогов. Это будет сравнивать файлы, основанные на временах и размерах модификации файлов ..

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

Это будет сравнивать файлы, основанные на временах и размерах модификации файлов … I think это то, что вы действительно хотите, или, по крайней мере, вы не против, если это так? Я понял, что вы просто хотите, чтобы это случилось быстрее , а не то, что вам нужно, чтобы игнорировать разницу между содержимым файла. Если вы хотите, чтобы он не отображал разные файлы с одинаковыми именами, я думаю, что добавление опции сделает это.

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

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

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

16

Как и в ответе ls, но если вы установите дерево , вы можете

2

Затем просто разделите два списка.

2

Это оптимальное решение

— краткая информация о коммутаторах сообщает, отличаются ли файлы, а не детали разницы.

1

используйте «diff -qr», чтобы получить разные файлы, а затем отфильтруйте сравнение файлов с grep, чтобы получить только имена файлов, которые находятся только в одном из каталогов.

-3

Я думаю, что только rsync является userfull. почему?

diff полезен только для структур, содержащих файлы и каталоги. Diff не дает адекватных кодов выхода, когда мы используем символические ссылки. В этой ситуации diff может возвращать 2 кода выхода, даже если src и dst идентичны (времена, размеры, имена, временные метки, указательные программные ссылки и т. Д.).

dir, файловая система не гарантирует упорядочение файлов, даже если содержимое каталога на src и dst идентично. Может быть, вы должны отфильтровать вывод ls, отсортировав его. Но pure ls отображает только имена узлов.

возможно, скрипт, включающий diff, cmp, test -X для типов узлов, будет полезен, но помните о перегрузке, выполняемой многими прогонами test /cmp. Сценарий будет очень медленным.

Как обычно, если вы хотите получить простую информацию, «dirs is /not is same», вы должны использовать rsync с параметром -n (dry). Если вы хотите найти то, что по-другому, используйте команду diff.

COLOPHON top

       This page is part of the diffutils (GNU diff utilities) project.
       Information about the project can be found at 
       ⟨http://savannah.gnu.org/projects/diffutils/⟩.  If you have a bug
       report for this manual page, send it to bug-diffutils@gnu.org.  This
       page was obtained from the project's upstream Git repository
       ⟨git://git.savannah.gnu.org/diffutils.git⟩ on 2020-08-13.  (At that
       time, the date of the most recent commit that was found in the repos‐
       itory was 2020-03-15.)  If you discover any rendering problems in
       this HTML version of the page, or you believe there is a better or
       more up-to-date source for the page, or you have corrections or
       improvements to the information in this COLOPHON (which is not part
       of the original manual page), send a mail to man-pages@man7.org

diffutils 3.7.29-7c13-dirty       May 2020                           DIFF(1)

Pages that refer to this page:
cmp(1), 
diff3(1), 
egrep(1), 
fgrep(1), 
gdiffmk(1), 
gendiff(1), 
grep(1), 
patch(1), 
sdiff(1), 
suffixes(7)

3.4 Двухстороннее отображений различий

‘diff’ позволяет двусторонне отображать различия между двумя
файлами. Файлы отображаются в двух колонках разделенных колонкой
управляющих символов. Колонка управляющих символов состоит из
следующих маркеров:

Пробел

Соответствующие строки эквивалентны. Это означает, что либо они
одинаковые, или различие игнорировано из-за одной из опций
‘—ignore’ (см. «Пропуски».).

‘|’

Соответствующие строки разные, и либо обе приведены полностью, либо
обе неполностью.

‘<‘
Строка содержится только в первом файле.

‘>’

Строка содержится только во втором файле.

‘(‘

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

‘)’

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

‘\’

Соответствующие строки разные, первая строка приведена неполностью.

‘ /

Соответствующие строки разные, вторая строка приведена неполностью.

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

Для интерактивного устранения различий при двустороннем формате
можно использовать команду ‘sdiff’. (См. подробнее «Интерактивное
устранение различий»).

GNU diffUtils Package

The diff command is bundled inside the GNU diffUtils package along with other comparison tools such as cmp, sdiff, and diff3. As such, most Linux distros come with a preinstalled copy of the diffUtils package.

So, we can skip the installation if we already have the required binary file for diff. But, if it’s missing or if we need a different version of the package, then we might need to install it ourselves.

Let’s begin by checking our system for the diff binary file:

Well, it looks like the diffUtils package isn’t installed, so we’ll need to install it.

First, let’s grab a tar archive of the package from the GNU FTP server using the curl command:

Then, let’s extract the package and install the binaries inside the /usr/bin directory:

And, we’re ready to go.

Как сравнить два файла с помощью Linux

Команда, используемая в Linux для отображения различий между двумя файлами, называется командой diff.

Простейшая форма команды diff заключается в следующем:

diff file1 file2

Если файлы совпадают, то при использовании этой команды выход будет отсутствовать, однако, поскольку есть различия, вы увидите вывод, похожий на следующий:

2,4c2,3

<10 зеленых бутылок, стоящих на стене

<Если одна зеленая бутылка должна случайно упасть

<На стене будет стоять 9 зеленых бутылок

> Если 1 зеленая бутылка должна случайно упасть

> На стене будет стоять 9 зеленых бутылок

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

Используя собственные глаза, вы можете видеть, что различия между двумя файлами выглядят следующим образом:

  • Второй файл имеет только три строки, тогда как первый файл имеет 4.
  • Второй файл говорит «1 зеленая бутылка» на третьей строке, тогда как в первом файле говорится «одна зеленая бутылка»,
  • Во втором файле говорится «есть», а не «есть» на последней строке

Результат команды diff показывает, что между строками 2 и 4 первого файла и строками 2 и 3 второго файла имеются различия.

Затем он перечисляет строки от 2 до 4 из первого файла, за которым следуют две разные строки во втором файле.

Использование

diff вызывается из командной строки с именами двух файлов в качестве аргументов: diff original new. Вывод команды представляет собой изменения, которые нужно произвести в исходном файле original, чтобы получить новый файл new. Если original и new — каталоги, то diff автоматически будет применён к каждому файлу, который существует в обоих каталогах.
Все примеры в этой статье используют следующие два файла, original и new:

original:

1 Эта часть документа
2 оставалась неизменной
3 от версии к версии

Если
4 в ней нет изменений, она
5 не должна отображаться.
6 Иначе это не способствует
7 выводу оптимального
8 объёма произведённых
9 изменений.
10
11 Этот абзац содержит
12 устаревший текст.
13 Он будет удалён
14 в ближайшем будущем.
15
16 В этом документе
17 необходима провести
18 проверку правописания.
19 С другой стороны, ошибка
20 в слове — не конец света.
21 Остальная часть абзаца
22 не требует изменений.
23 Новый текст можно
24 добавлять в конец документа.

new:

1 Это важное замечание!
2 Поэтому оно должно
3 быть расположено
4 в начале этого
5 документа!
6
7 Эта часть документа
8 оставалась неизменной
9 от версии к версии. Если
10 в ней нет изменений, она
11 не должна отображаться.
12 Иначе это не способствует
13 выводу оптимального
14 объёма информации.
15
16 В этом документе
17 необходимо провести
18 проверку правописания.
19 С другой стороны, ошибка
20 в слове — не конец света.
21 Остальная часть абзаца
22 не требует изменений.
23 Новый текст можно
24 добавлять в конец документа.
25
26 Этот абзац содержит
27 важные дополнения
28 для данного документа.

Команда diff original new производит следующий нормальный дифф-вывод:

0a1,6
> Это важное замечание!
> Поэтому оно должно
> быть расположено
> в начале этого
> документа!
>
8,14c14
объёма информации.
17c17
необходимо провести
24a25,28
>
> Этот абзац содержит
> важные дополнения
> для данного документа.

В этом традиционном формате вывода a означает добавлено (от англ. add), dудалено, сизменено.
Перед буквами a, d или c стоят номера строк исходного файла, после них — номера строк конечного файла. Каждая строка, которая была добавлена, удалена или изменена, предваряется угловыми скобками.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector