Renomeando diretórios com extensões específicas

0

Uma extensão para a pergunta anterior que fiz: Renomear um arquivo alfanumérico

Eu tenho um diretório que tem subdiretórios com uma extensão de * _upstream:

DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream
GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream

Eu quero renomeá-los removendo tudo após o primeiro '_' de modo que se torne algo como

DHX30
GEMIN5
    
por AishwaryaKulkarni 29.06.2018 / 22:21

2 respostas

3
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
    
por 29.06.2018 / 22:32
2

Se no Linux:

rename -v 's/_.*//' *_upstream/
    
por 29.06.2018 / 22:29