Eu quero copiar arquivos modificados em um repositório svn para outro diretório, mantendo sua estrutura de diretórios.
Depois de ler a página de manual awk e xargs, encontro uma maneira de alterar os nomes de arquivos como este:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
Mas o problema é que, dessa maneira, as estruturas de diretório não são preservadas, desejo copiar arquivos como este:
./common/superp.c -> /tmp/xen/common/superp.c
./common/m2mgr.c -> /tmp/xen/common/m2mgr.c
./common/page_alloc.c -> /tmp/xen/common/page_alloc.c
./arch/x86/mm.c -> /tmp/xen/arch/x86/mm.c
./arch/x86/mm/shadow/private.h -> /tmp/xen/arch/x86/mm/shadow/private.h
Tentei alterar o comando cp para cp '{}' / tmp / xen / '{}', mas não havia esse arquivo ou diretório. Existe alguma maneira de criar um arquivo de cópia de cp e criar um diretório, se necessário? E, por favor, indique se essa cadeia de comandos pode ser simplificada. :-)
Obrigado por todas as suas respostas. Como o diretório é um pouco grande, não quero copiar o diretório inteiro usando cp -R ou rsync. A sugestão de CK de usar um tubo de alcatrão é bastante útil.
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)