Renomeia um arquivo alfanumérico

3

Eu tenho os seguintes arquivos em um diretório:

 GE.AARS_vs_Control16.txt
 GE.DHX30_vs_Control18.txt
 GE.DNAJC2_vs_Control18.txt

Gostaria de remover o *_Control<numeric> e substituí-lo por *_Others , de modo que os arquivos sejam renomeados como

 GE.AARS_vs_Others.txt
 GE.DHX30_vs_Others.txt
 GE.DNAJC2_vs_Others.txt
    
por AishwaryaKulkarni 22.06.2018 / 21:26

3 respostas

5
for file in /dir/*.txt; do
    mv "$file" "${file%_*}_Others.txt"
done

O ${file%_*} é uma forma de expansão de parâmetro do shell que removerá tudo do último _ e on.

    
por 22.06.2018 / 21:34
4

Usando a ferramenta Perl rename , supondo que você esteja no mesmo diretório que os arquivos a renomear:

rename 's/_Control1[68]/_Others/' GE.*_Control1[68].txt
    
por 22.06.2018 / 21:48
0

Se você gosta de um pouco de ofuscação, aqui está outra maneira:

paste <(ls) <(ls | sed 's/_Control1[68]/Others') | sed 's/^/mv /' | bash

Primeiro, tente executar o pipeline sem o bash :-) Estou assumindo que não há outros arquivos no diretório. Se houver, substitua cada ls por ls *Controll1[68].txt ou algo assim para limitar a lista.

"I'd rather write programs that write programs than write programs" - Richard Sites

(Eu poderia jurar que era Alan Perlis, mas o Google não concorda).

    
por 22.06.2018 / 22:55