Less
просто буферизирует содержимое, которое вы видите в терминале, в память. А команда more
буферизирует все содержимое файла в память, а затем показывает его. Единственная, но очень большая разница между ними. Меньше - эффективнее :)
Вы можете преобразовать встроенный вывод diff -ru
в параллельное представление, с номерами строк и цветом с помощью программы python cdiff
, также известной как cdiff.py (не путать с оберткой cdiff
, которая является частью colordiff
), Мэтью Ванг.
Следуйте любому из предложенных методов установки, приведенных в ссылке, или просто извлеките скрипт cdiff.py
из загрузки в свой PATH, тогда вы можете сделать
diff -ru dir1 dir2 | cdiff.py -s
Стивен Харрис дал очень хороший ответ
к предыдущей версии этого вопроса.
К сожалению Он не может справиться с патологическим случаем
имен файлов с новыми строками в них.
Вот небольшая адаптация его ответа, которая касается этого случая.
(Я также изменил его, чтобы использовать cat -n
вместо nl
,
и использовать параметр -y
для diff
.)
find folder1 -type f -exec bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash {} +
Поскольку вы попросили xargs
в комментарии к ответу Стивена,
вот вам:
find folder1 -type f -print0 | xargs -0 bash -c 'for file1
do
file2="${file1/folder1/folder2}"
echo "Comparing $file1 to $file2"
diff -y <(cat -n "$file1") <(cat -n "$file2")
done' bash
Обратите внимание, что эти команды должны выполняться в bash
,
потому что оболочка POSIX не поддерживает
${параметр/pattern/string}
,
и решение xargs
должно быть сделано в GNU-land,
поскольку POSIX не поддерживает find -print0
или xargs -0
.
(Конечно, вы можете заменить -print0
на -print
и отказаться от -0
,
но тогда вы потеряете возможность обрабатывать имена файлов
с новыми строками в них.)