No diretório / bar, crie todos os links simbólicos para tudo, exceto essas extensões.
find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;
E, em seguida, para copiar todas as extensões, o mesmo comando na maior parte.
find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;
Editar : Copie toda a estrutura de diretórios, crie links simbólicos para alguns arquivos, copie outros. Não tinha certeza se isso era possível no começo com um único comando, mas acabei de aprender alguns outros truques úteis para encontrar.
find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh
mv bar/foo/* bar/ && rm -R bar/foo/
Apenas o importante a notar é quando você faz o link simbólico que você dá o caminho real que os links levarão para se relacionar com foo /. Meu exemplo mostra links relativos quando eles estão lado a lado (também pode fazer links simbólicos absolutos também).