Предположим, у вас есть dir1
, dir2
и dir3
на одном уровне
с настройкой контента, как показано ниже:
mkdir dir1
mkdir dir2
echo 1 > dir1/a
echo 1 > dir2/a
echo 2 > dir1/b
echo 3 > dir2/b
echo 4 > dir2/c
cp -r dir1 dir3
Когда вы создаете и применяете патч следующим образом:
diff -ruN dir1 dir2 | patch -p1 -d dir3
Тогда у вас есть содержимое dir2
и dir3
эквивалент.
Если ваш dir2
не на том же уровне, что и dir1
тогда вы должны редактировать имена файлов в патче
так что у вас есть равное количество компонентов пути
в именах файлов dir1
и dir2
.
Вам лучше поставить dir2
на тот же уровень, что и dir1
,
потому что нет элегантного способа сделать это (по крайней мере, мне известно).
Здесь следуйте "уродливым" путем.
Считайте, что ваш dir2
находится в каком-то $BASEDIR
тогда вы должны обновить ваш diff, чтобы урезать путь $BASEDIR
из dir2
как это
diff -ruN dir1 $BASEDIR/dir2 | \
perl -slne 'BEGIN {$base =~ s/\//\\\//g; print $base}
s/\+\+\+ $base\//\+\+\+ /g; print' \
-- -base=$BASEDIR
И тогда вы можете применить полученный путь, как указано выше.