Переименование каталогов с определенными расширениями

Расширение предыдущего вопроса, который я задал: переименовать буквенно-цифровой файл

У меня есть каталог, в котором есть подкаталоги с расширением * _upstream:

DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream 

Я хочу переименовать их, удалив все после первого «_», так что это становится что-то вроде

 DHX30 GEMIN5 

 for dir in ./*_*_upstream/ do mv -- "$dir" "${dir%%_*}" done 

Вышеприведенный цикл выбирает каждый каталог (завершающий слеш делает это) в текущем каталоге, который соответствует шаблону: «(что-то) подчеркивание (что-то) подчеркивание вверх по течению». Затем он переименовывает эти каталоги, используя расширение параметра, чтобы удалить самое длинное совпадение: «подчеркивание (что-либо)», которое удаляет все из и после первого подчеркивания.

Например:

Настроить:

 mkdir DHX30_foo_upstream mkdir GEMIN5_vs_Cblah_upstream touch DX31_foo_upstream 

Результат:

 $ tree . ├── DHX30 ├── DX31_foo_upstream └── GEMIN5 2 directories, 1 file 

Если в Linux:

 rename -v 's/_.*//' *_upstream/