как насчет того, чтобы сначала скопировать
cp -r /old/folder /new/folder
затем перейдите в новую папку и запустите
find . -type f ! -iname "*.txt" -delete
или просто
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Изменить: хорошо, вы хотите одну команду, которая фильтрует (я не проверял это, потому что в моей системе нет команды cpio
!). Вот где я нашел это: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" -print0 |
cpio -pmd0 /dest-dir
Пожалуйста, сначала проверьте это, потому что я еще не пробовал. Если бы кто-то проверил, это было бы здорово.