Renomeie o grupo de arquivos com um padrão específico

1

Eu tenho vários arquivos com os seguintes detalhes de nome.

2007-07-22-2300-11S.NAN___024_ABI___HH_E_SAC

Onde:

  • 2007-07-22 é a data.
  • 2300-11S é hhmm-sec.
  • NAN___024 é a mesma rede para cada arquivo (não é necessário no novo nome).
  • ABI__HH_E é o nome da estação com o canal Leste.
  • SAC é extensão.

Eu quero renomear todos os arquivos seguindo o mesmo formato:

2007.204.23.00.ABI.e

Onde:

  • 2007 é o ano.
  • 204 é o dia juliano (de 07 a 22).
  • 23.00 é tempo.
  • ABI é estação.
  • e é o nome do canal.
por rakesh singh 15.08.2015 / 06:57

2 respostas

1

Assumindo que você:

  • queria "1 + data ordinal" na posição 2.
  • "_" - nomes de estação preenchidos.
  • letras minúsculas do nome do canal

Então, isso deve realizar a transformação desejada.

$ ls
2007-07-22-2300-11S.NAN___024_ABI___HH_E_SAC
$ for i in *; do
    od="$(expr $(date +%j -d "${i:0:10}") + 1 )";
    chn="${i:39:1}";
    sta="$(echo ${i:30:6} | tr -d '_')";
    mv "$i" "${i:0:4}.$od.${i:11:2}.${i:13:2}.$sta.${chn,,}" ;
  done 
$ ls
2007.204.23.00.ABI.e
    
por 16.08.2015 / 02:10
1

Para renomeação em massa, prename é seu amigo. Neste caso:

prename 's/^(\d*)-(\d*-\d*)-(\d*)-.*___\d*_(\w*)___\w*_(\w*)_\w*/$1.$2.$3.$4.$5/' *

(ignorando a data juliana até que as respectivas questões tenham sido esclarecidas).

    
por 15.08.2015 / 12:23

Tags