Как различить только исходные файлы? - PullRequest
8 голосов
/ 20 апреля 2010

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

команда diff поддерживает только --exclude, но я бы хотел сделать что-то вроде diff -wbur --include='*.c,*.h' tree1 tree2

Я знаю, что этот вопрос несколько связан, но на самом деле не решает мою проблему.

Бонусные баллы за игнорирование блоков изменений, которые полностью находятся в комментариях C:)

Ответы [ 5 ]

14 голосов
/ 20 апреля 2010

Небольшая модификация результата от Google помогла, в tree1 сделал find . -name '*.[ch]' -exec diff -wibu {} ../tree2/{} \;

4 голосов
/ 16 августа 2012

Вот небольшой скрипт для создания патчей:

#!/bin/bash

USAGE="USAGE: $0 <dist dir> <edited dir>"

[ '--help' == "$1" ] && { echo $USAGE; exit 0; }
[ 2 -eq $# ] || { echo $USAGE; exit 1; }

# trim starting './' and trailing /'/
original=$(echo $1 | sed 's-^\./--;s-/$--')
changed=$(echo $2 | sed 's-^\./--;s-/$--')

[ -d $original ] || { echo "ERROR: Directory $original does not exist" >&2 ; exit 2; }
[ -d $changed ] || { echo "ERROR: Directory $changed does not exist" >&2; exit 3; }

#command="ls -l"
command="diff -Naur"

find $original -name '*.[ch]' -o -name '*.cpp' | sed 's-^[^/]*/--' | { while read file; do $command  $original/$file $changed/$file; done; }
2 голосов
/ 03 июня 2015

Вы можете записать все файлы для исключения во временный файл и передать его в аргумент -X diff.

find tree1 tree2 -type f -not -name '*.[ch]' >exludes
diff -wbur tree1 tree2 -X excludes

Или проще (работает в Bash):

diff -wbur tree1 tree2 -X <(find tree1 tree2 -type f -not -name '*.[ch]')

Вы можете использовать несколько аргументов имени, если у вас более длинные расширения имени файла:

diff -wbur tree1 tree2 \
  -X <(find tree1 tree2 -type f -not -name '*.java' -and -not -name '*.sql')
2 голосов
/ 09 мая 2014

Я бы исключил все, что не соответствует .c или .h. Таким образом, это означает, что он будет включать только файлы .c и .h:

diff -x "*.[^ch]"

Для меня это лучший способ, потому что вы используете только diff

0 голосов
/ 03 октября 2014

Я предложил более простое решение, чем поиск для сопровождающих diff, вот тема: http://lists.gnu.org/archive/html/bug-diffutils/2014-10/msg00000.html

Идея состоит в том, чтобы предоставить новую опцию, которая инструктирует diff анализировать файлы, которые соответствуют регулярному выражению, например: diff -Nurp --only "*.[hc]" source/ source-new/

Вот инструкция по исправлению diffutils

Клон репо git clone git://git.savannah.gnu.org/diffutils.git

запустите bootstrap.sh внутри каталога diffutils и разрешайте зависимости до тех пор, пока он не создаст скрипт ./cofigure

Скачать патч по ссылке выше

Применить это git apply <PATCHFILE>

Настройка и компиляция ./configure make

Это создаст пропатченный diff в src / diff

Приветствия

...