You can do it with rsync like this:
Code:
rsync -a --include "*/" --include "*.jpg" --exclude "*" src/ dest/
If you want to add more file types, just include extra --include "*.whatever" before the --exclude.
If rsync is not installed (it should be because it's so über useful), you can do it using cpio in "copy pass" mode, using find to locate the files:
Code:
cd src
find . -depth -name \*.jpg -print0 | cpio --null -pvd /path/to/dest/dir
See the cpio info page for a tutorial and explanation of options etc.