¿qué tal si primero lo copia con
cp -r /old/folder /new/folder
luego ve a la nueva carpeta y ejecuta
find . -type f ! -iname "*.txt" -delete
o solo
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Editar: ok, quieres un comando que filtre (¡no lo he probado porque mi sistema no tiene el cpio
comando!). Aquí es donde lo encontré: 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, probar primero esto, porque no he probado todavía. Si alguien verificara, eso sería genial.