How can I recursively copy files by file extension, preserving directory structure?
You can use find and cpio to do this
cd /top/level/to/copy
find . -name '*.txt' | cpio -pdm /path/to/destdir
(-updm for overwrite destination content.)
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
Easiest way that worked for me:
cp --parents -R jobs/**/*.xml ./backup/
one catch is you have to navigate to the "desired" directory before so the "parent path" is correct.
Also make sure that you enabled recursive globs in bash:
shopt -s globstar