Этот вопрос похож на Как различить только первую строку из двух файлов?, но рекурсивно. Я хотел бы использовать две директории, но:

  • различать только первые N строк каждого файла в двух каталогах
  • различать все, кроме первых N строк каждого файла в двух каталогах

2 ответа2

1

Мое первое предложение для вас - использовать Мелд. Это работает и из командной строки.

Он имеет следующие функции, которые могут вас заинтересовать:

  • Сравнивайте два или три каталога по файлам, показывая новые, отсутствующие и измененные файлы.
  • Используйте встроенную регулярную текстовую фильтрацию, чтобы игнорировать неинтересные различия.

Единственное, что вам нужно сделать, это выяснить правильные шаблоны регулярных выражений, которые можно использовать для игнорирования неважных данных (в зависимости от синтаксиса ваших метаданных, которые вы хотите игнорировать).

0

Эти два цикла используют diff -qr чтобы сделать начальный diff, главным образом, чтобы легко получить имена файлов, а затем выполнить отдельный diff для найденной пары файлов. sed используется для очистки первых N строк или для сохранения только первых N строк. Сначала очистите N строк:

N=2
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do  diff --label "$a" --label "$b" -u <(sed "1,${N}s/.*//" <"$a") <(sed "1,${N}s/.*//" <"$b")
done

И это, чтобы сохранить N:

diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do  diff --label "$a" --label "$b" -u <(sed -n "1,${N}p" <"$a") <(sed -n "1,${N}p" <"$b")
done

Это предполагает отсутствие пробелов / табуляций в именах файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .