Как рекурсивно расположить рядом каталоги diff с номерами строк в diff в unix?

Команда

Less просто буферизирует содержимое, которое вы видите в терминале, в память. А команда more буферизирует все содержимое файла в память, а затем показывает его. Единственная, но очень большая разница между ними. Меньше - эффективнее :)

1
10.03.2019, 16:01
2 ответа

Вы можете преобразовать встроенный вывод diff -ru в параллельное представление, с номерами строк и цветом с помощью программы python cdiff, также известной как cdiff.py (не путать с оберткой cdiff, которая является частью colordiff), Мэтью Ванг.

Следуйте любому из предложенных методов установки, приведенных в ссылке, или просто извлеките скрипт cdiff.py из загрузки в свой PATH, тогда вы можете сделать

diff -ru dir1 dir2 | cdiff.py -s
1
27.01.2020, 23:35

Стивен Харрис дал очень хороший ответ к предыдущей версии этого вопроса.  К сожалению Он не может справиться с патологическим случаем имен файлов с новыми строками в них.  Вот небольшая адаптация его ответа, которая касается этого случая.  (Я также изменил его, чтобы использовать 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, но тогда вы потеряете возможность обрабатывать имена файлов с новыми строками в них.)

1
27.01.2020, 23:35

Теги

Похожие вопросы