for dir in ./*_*_upstream/
do
mv -- "$dir" "${dir%%_*}"
done
O loop acima seleciona cada diretório (a barra final faz isso) no diretório atual que corresponde ao padrão: "(algo) sublinhado (algo) sublinhado upstream". Em seguida, ele renomeia esses diretórios usando a expansão de parâmetro para remover a correspondência mais longa de: "sublinhado (qualquer coisa)", que remove tudo de e depois do primeiro sublinhado.
Por exemplo:
Configuração:
mkdir DHX30_foo_upstream
mkdir GEMIN5_vs_Cblah_upstream
touch DX31_foo_upstream
Resultado:
$ tree
.
├── DHX30
├── DX31_foo_upstream
└── GEMIN5
2 directories, 1 file