Que tal você primeiro copiá-lo com
cp -r /old/folder /new/folder
então vá para a nova pasta e execute
find . -type f ! -iname "*.txt" -delete
ou apenas
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Edit: ok, você quer um comando que filtre (eu não testei isso porque meu sistema não possui o cpio
comando!). Aqui é onde eu o encontrei: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" -print0 |
cpio -pmd0 /dest-dir
Por favor testar este primeiro, porque eu não tentei ainda. Se alguém verificar, isso seria ótimo.