source_dir 配下にある *.x というファイル(同じディレクトリ階層には *.y とか違う拡張子のファイルがあるがそれらを除いて)を、ディレクトリ構造を維持したまま destnation_dir にコピーするには、

cd source_dir/
cp --parent */*/*.x   destnation_dir/

のようにすると実現できます。

しかしながら、*.x がたくさんあるとコマンドラインサイズオーバーでエラーになってしまいます。そのような場合、どうするのがいいのでしょうか?

例えば、

cd source_dir/
find . -name "*.x" | xargs tar cf - | tar xf - -C destnation_dir/

のようにしてもできるようですが。