En Linux lo haremos con rsync
$ rsync -a -f"+ */" -f"- *" /origen/ /destino/
Los parámetros -f significan, "copia todos los directorios" y "no copies nada más" respectivamente.
Aquí copiaríamos directorios y ficheros de python (.py) nada más:
$ rsync -a -f"+ */" -f"+ *.py" -f"- *" /origen/ /destino/
aunque dada la riqueza de sus comandos también se nos podía haber ocurrido:
$ find -type d -links 2 -exec mkdir -p "/ruta/donde/crear/{}" \;
En Windows
XCOPY C:\Documentos D:\Documentos /t /e
# A partir de Vista con robocopy tenemos más opciones, si CarpetaDestino no existe la creará
robocopy "D:\CarpetaOrigen" "F:\CarpetaDestino" /e /xf *