Embora os nomes de caminho fornecidos não pareçam corretos (especialmente a árvore new
, que outra pessoa alterou), você pode ter em mente que o programa patch
pode ser instruído a ignorar um determinado número de níveis de diretório da saída de diff
usando a opção -p
.
Ao aplicar um patch aos arquivos em um diretório diferente do mostrado pelo arquivo de patch, você deve cd
no diretório (para cancelar uma parte da diferença) e usar a opção -p
para ajustar o cd
.
Aqui está um pequeno script ilustrando como eu resolveria isso (usando a opção dry-run do patch GNU para uma listagem simples):
#!/bin/sh
cd /tmp/foo
OUT=/tmp/patch.diff
rm -f $OUT
diff -u orig/l1/l2/file2patch new/l1/l2/file2patch >>$OUT
diff -u orig/l1-2/file2patch new/l1-2/file2patch >>$OUT
diffstat -p1 $OUT
cd orig
patch -p1 --dry-run <$OUT
Entradas:
$ find . -type f
./new/l1/l2/file2patch
./new/l1-2/file2patch
./orig/l1/l2/file2patch
./orig/l1-2/file2patch
Saída:
$ /tmp/xx
l1-2/file2patch | 19 +++++++++++++------
l1/l2/file2patch | 5 ++---
2 files changed, 15 insertions(+), 9 deletions(-)
/tmp/foo/orig
patching file l1/l2/file2patch
patching file l1-2/file2patch
Leitura adicional: