diff не будет работать рекурсивно

diff не будет работать рекурсивно

Я пытаюсь рекурсивно сравнить два каталога с помощью утилиты командной строки diff. У меня есть две папки, diff1и diff2, с таким содержимым:

введите описание изображения здесь

diff2пусто. Но когда я это делаю, diff -r diff1 diff2я получаю только

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

Это раздражает. Что мне нужно сделать, чтобы diffрекурсивно работать? Я пробовал --recursive, но это не помогает. Я на El Capitan, и diff -vменя достаёт diff (GNU diffutils) 2.8.1.

решение1

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

Когда я читаю «рекурсивно», я предполагаю, что процесс не остановится на первом уровне.

Это не останавливается из-за первого уровня. Помните, что означает рекурсия:

используя функции, которыевызывать себя из своего собственного кода

(источник:здесь; выделено мной)

Представьте, что у вас есть общий подкаталог fooв обоих diff1и diff2. Рекурсия означает, что ваша исходная команда diff -r diff1 diff2в какой-то момент вызывает

diff -r diff1/foo diff2/foo

Хорошо, на практике это, скорее всего, делается подпрограммой, вызывающей саму себя в рамках одного процесса (но я полагаю, что реализация, которая на самом деле вызывает diffисполняемый файл, возможна). Тем не менее, логически это выглядит так.

У вас есть diff1/folder, но нет diff2/folder. Как вы можете позвонить, diffчтобы сравнить их? Другими словами, что должно <unknown_name>быть, чтобы вы получили желаемый вывод из приведенной ниже формы?

diff -r diff1/folder diff2/<unknown_name>

Нет ничего <unknown_name>подходящего. Рекурсивный diffне может спуститься до folder, не превратившись во что-то вроде рекурсивного lsили find. Быть рекурсивным lsили findне является его работой.

Тем не менее, вы можете выполнять запросы diff1/folderс помощью ls -Ror find(рекурсивно по умолчанию), после того как извлечете из diffэтого уроки Only in diff1: folder.

Связанный контент