find é uma maneira bastante útil de comandar vários arquivos em lote, mas carrega apenas o nome completo do arquivo em torno de qual meio, quando usado no argumento -o , geraria file.cpp.so . Mas podemos limpar depois disso.
find -maxlevel 1 -iname '*.cpp' -exec g++ -shared -fPIC -o {}.so {} \;
rename 's/cpp\.so$/so/i' *.cpp.so
cp *.so ../../dir