Gunzip vários arquivos e renomeá-los

3

Eu quero saber se é possível gunzip de vários arquivos e renomeá-los com um comando / script.

Eu tenho vários arquivos no formato:

test.20120708191601.DAT.3599502593.gz
test.20120708201601.DAT.99932140.gz
test.20120708204600.DAT.1184686967.gz
test.20120708212100.DAT.824089664.gz
test.20120708215100.DAT.1286044098.gz
test.20120708222100.DAT.1414234861.gz

Eu preciso gunzip deles e remover tudo depois do .DAT , para estar no formato:

test.20120708191601.DAT
test.20120708201601.DAT
test.20120708204600.DAT
test.20120708212100.DAT
test.20120708215100.DAT
test.20120708222100.DAT
    
por Pieter van Niekerk 09.07.2012 / 16:15

1 resposta

7

Tente isto:

for file in *.gz; do
  gunzip -c "$file" > "${file/.DAT*/.DAT}"
done

A abordagem usa a opção gunzip para enviar o fluxo descompactado para a saída padrão ( -c ), para que possamos redirecioná-lo para outro arquivo, sem uma segunda chamada de renomeação. A renomeação é feita na própria variável filename, usando a substituição bash (corresponda a qualquer padrão globbing .DAT* e substitua por .DAT ). O próprio loop apenas repete os arquivos no diretório atual com nomes que terminam com .gz .

    
por 09.07.2012 / 16:22

Tags