cd DIR
for dir in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n" )
do
cd $dir
mkdir -p mydir
mv *.py mydir
cd ..
done
cd no diretório de nível superior. O comando find encontrará todos os arquivos que correspondem aos critérios fornecidos e os imprime. Maxdepth e mindepth limitam a pesquisa aos arquivos diretamente sob o DIR, e o tipo limita a lista de resultados aos diretórios. Use um loop for para iterar sobre cada um dos diretórios retornados pelo comando find. cd em cada um, crie o subdiretório mydir, mova os arquivos para dentro dele e, em seguida, faça cd back up para DIR para que a próxima iteração possa processar o próximo diretório.
Se você tiver outros diretórios sob DIR que não contenham * .py, você poderá ignorá-los inserindo uma instrução if logo acima da linha cd $ dir:
if [ "$dir" = "skip" -o "$dir" = "whatever" ]; then continue; fi