2012-04-16 17 views
5

Tengo un directorio que tiene muchos archivos de encabezado (.h) y otros archivos .o y .c y otros archivos. Este directorio tiene muchos directorios anidados dentro. Quiero copiar solo los archivos de encabezado a un directorio separado conservando la misma estructura en el nuevo directorio.¿Cómo puedo copiar solo los archivos de encabezado de todo un directorio anidado a otro directorio manteniendo la misma jerarquía después de copiar a la nueva carpeta

cp -rf oldDirectory newDirectory copiará todos los archivos. Quiero copiar solo archivos de encabezado.

+0

duplicado Posible de (http [copia recursiva de archivos específicos en Unix/Linux?]: //stackoverflow.com/questions/9622883/recursive-copy-of-specific-files-in-unix-linux) – iammilind

Respuesta

7
(cd src && find . -name '*.h' -print | tar --create --files-from -) | (cd dst && tar xvfp -) 

se puede hacer algo similar con cpio si lo que desea es enlace duro los archivos en lugar de copiarlos, pero es probablemente requiera un poco de mv'ing después. Si tiene muchos datos y no le importa (¡o necesita!) Compartirlos, esto puede ser mucho más rápido. Se confunde si el horario de verano tiene que tener un src en él - esto es, si no es sólo un efecto secundario:

  1. hallazgo src -name '* .h' -print | cpio -pdlv dst
  2. mv dst/src/* dst /.
  3. rmdir DST/src
+0

Suena bien ... Creo que cpio es lo que estaba buscando especialmente. la opción -d. – avimonk

1
cp -rf oldDirectory/*.h newDirectory 

o algo así (dependiendo de los caminos reales)

find oldDirectory -type f -name "*.h" -print0 | xargs -file cp file newDirectory 
+2

La primera solución copia archivos .h a profundidad 1 solamente. ¿Qué ocurre si tenemos archivos de encabezado en profundidad 2 y 3 y así sucesivamente? – avimonk

1

éste trabajó para mí:

rsync -avm --include='*.h' -f 'hide,! */' . /destination_dir 

de here

Cuestiones relacionadas