Como descompactar apenas determinados arquivos que seguem um padrão especificado?

2

Usando bash.

Considerando que tenho um diretório D contendo os seguintes arquivos:

20170301:00.out.gz
20170301:01.out.gz
...
20170302:01.out.gz
20170302:02.out.gz

etc.

Os arquivos seguem o padrão 'yyyymmdd: hh' (ano, mês, dia, hora). Usando o bash, eu gostaria de descompactar apenas alguns desses arquivos, mas ainda não tenho certeza de como fazer isso.

Para um arquivo, eu poderia obviamente usar 'gunzip -c yyyymmdd: hh.out.gz', mas codificar isto para cada arquivo parece um pouco desnecessário ...

Se eu quiser apenas descompactar os arquivos de 7 de março a 14 de março, por exemplo, como devo abordar isso?

    
por Thijmen Dam 22.03.2018 / 15:02

3 respostas

4

Como você está usando o Bash, é possível usar as expansões de chaves :

gunzip {20170307..20170314}*.gz

Se você deseja visualizar apenas o conteúdo dos arquivos, adicione -c após gunzip .

Se você estiver faltando arquivos na sequência, gunzip reclamará deles, mas ainda processará todos os arquivos que estão presentes na sequência. Nesse caso, também é importante notar que a expansão em si falhará se a opção failglob shell estiver definida, mas esse não for o padrão no Bash.

    
por 22.03.2018 / 15:06
2

gunzip -c só grava o conteúdo na saída padrão em vez de descompactá-lo.

Para seus objetivos:

for a in {07..14}; do gunzip -c '201703'$a':02.out.gz'; done

    
por 22.03.2018 / 15:11
1

find abordagem:

find . -maxdepth 1 -type f -regextype posix-egrep \
-regex ".*/201703(0[7-9]|1[0-4]):[0-5][0-9]\.out\.gz$" -exec gunzip {} \;
    
por 22.03.2018 / 15:18

Tags