Como renomear múltiplos arquivos substituindo string no nome do arquivo?

0

Eu basicamente dividi um arquivo em 8 arquivos.

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat  #Original File

Eu tenho 8 novos arquivos abaixo do nome do arquivo.

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.aa
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ab
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ac
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ad
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ae
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.af
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ag
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ah

Eu quero renomear esses arquivos abaixo do nome:

DA_TRP_TOTAL-SHIPPED_v1_DNH_1_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_3_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_4_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_5_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_6_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_7_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_8_8_20170502094536.dat

Como posso fazer isso no script de shell unix?

    
por Soumen 11.08.2017 / 15:41

2 respostas

2

A ferramenta recomendada para renomear grupos de arquivos é rename , isso fará seu trabalho.

rename -n 'our $i++; s/_DNH_\K\d+_\d+(.*)\..*/${i}_8$1/' DA*.dat.*
    
por 11.08.2017 / 15:55
0

Você pode selecionar a ferramenta certa para começar a cuspir.

split -a 1 --numeric-suffixes=1 -n 8 myfile myFile_from_8_

isso dividirá myFile nas 8 partes com o nome começando com myFile_from_8_N (O N é de 1 a 8)

Ou até mesmo você pode simular a divisão com o comando awk como abaixo com o número X de registros em cada arquivo dividido (na amostra X=100 , significa 100 registros por arquivo):

awk 'NR%100==1{ file=sprintf("myFile_from_8_%d",((++c)) )} {print >file}' myFile
    
por 11.08.2017 / 18:10