2012-04-16 16 views
5

Ho una directory che contiene molti file di intestazione (.h) e altri file .o e .c e altri file. Questa directory contiene molte directory annidate. Voglio copiare solo i file di intestazione in una directory separata mantenendo la stessa struttura nella nuova directory.Come posso copiare solo i file di intestazione in un'intera directory annidata in un'altra directory mantenendo la stessa gerarchia dopo la copia in una nuova cartella

cp -rf oldDirectory newDirectory copierà tutti i file. Voglio copiare solo i file di intestazione.

+0

Possibile duplicato (http [copia ricorsiva di file specifici in Unix/Linux?]: //stackoverflow.com/questions/9622883/recursive-copy-of-specific-files-in-unix-linux) – iammilind

risposta

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

si può fare qualcosa di simile con cpio se si desidera solo per hard link i file invece di copiarli, ma è probabilmente per richiedere un po 'di tempo dopo. Se hai molti dati e non ti interessa (o non hai bisogno!) Di condivisione, questo può essere molto più veloce. Si confonde se l'ora legale ha bisogno di avere uno src in esso - questo è, se non è solo un effetto collaterale:

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

Sembra buono ... Penso che cpio sia quello che stavo cercando esp. l'opzione -d. – avimonk

1
cp -rf oldDirectory/*.h newDirectory 

o qualcosa del genere (a seconda delle condizioni percorsi effettivi)

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

La prima soluzione copia i file .h solo alla profondità 1. Cosa succede se abbiamo i file di intestazione a profondità 2 e 3 e così via. – avimonk

1

questo ha funzionato per me:

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

da here

Problemi correlati