Come posso ricorsivamente copiare i file per estensione di file, preservando la struttura di directory?

Alla linea di command Linux, vorrei copiare un insieme (molto grande) di file .txt da una directory (e le relative sottodirectory) ad un altro.

Ho bisogno della struttura della directory per rimanere intatta e devo ignorare i file tranne quelli che terminano in .txt .

È ansible utilizzare la ricerca e cpio per eseguire questa operazione

 cd /top/level/to/copy find . -name '*.txt' | cpio -pdm /path/to/destdir (-updm for overwrite destination content.) 
 cd /source/path find -type f -name \*.txt -exec install -D {} /dest/path/{} \; 

cosa succede prima di copiarlo

 cp -r /old/folder /new/folder 

quindi vai alla nuova cartella e esegui

 find . -type f ! -iname "*.txt" -delete 

o semplicemente

 cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete 

Modifica: ok si desidera un command che filtri (non ho testato questo perché il mio sistema non ha il command cpio !). Ecco where ho trovato: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files

 find . -name "*.txt" | cpio -pmd0 /dest-dir 

Prova prima questo perché non l'ho ancora provato. Se qualcuno avrebbe verificato, sarebbe stato fantastico.

Il modo più semplice che ha funzionato per me:

 cp --parents -R jobs/**/*.xml ./backup/ 

una cattura è devi spostarsi nella directory "desiderata" prima che il "path genitore" sia corretto.

Assicurati inoltre che abilitate globs ricorsive in bash:

 shopt -s globstar 

Un altro approccio

find . -name '*.txt' -exec rsync -R {} path/to/dext \;

Naviga nella directory:

 cp '*.css' /path/to/destination 

Devi spostarsi in each cartella della directory, ma è meglio di molte delle opzioni che ho visto finora.