Quiero copiar archivos modificados en un repositorio svn a otro directorio, manteniendo su estructura de directorios.
Después de leer la página man de awk y xargs encuentro una forma de obtener los nombres de los archivos modificados de esta manera:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
Pero el problema es que de esta manera no se conservan las estructuras de los directorios, quiero copiar los archivos así:
./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
He intentado cambiar el comando cp por cp '{}' /tmp/xen/'{}' pero dice que no existe tal archivo o directorio. ¿Hay alguna manera de hacer que cp copie el archivo y cree el directorio si es necesario? Y por favor, señale si esta cadena de comandos puede ser simplificada. :-)
Gracias por todas vuestras respuestas. Como el directorio es un poco grande, no quiero copiar todo el directorio usando cp -R o rsync. La sugerencia de CK de utilizar una tubería tar es bastante útil.
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)