como gunzip vários arquivos de uma só vez para uma pasta específica?

1

Eu tenho uma pasta /mydata que contém vários arquivos gz .

Eu gostaria de descompactar todos eles (mantendo os zips originais) para outra pasta /myoutput

Como posso fazer isso? Posso acompanhar o processo de descompactação também?

Obrigado!

    
por ℕʘʘḆḽḘ 31.07.2018 / 16:10

2 respostas

1

Usando gzip , basename e um loop:

for pathname in /mydata/*.gz; do
    gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done

Isso iterará todos os nomes de caminho que corresponderem a /mydata/*.gz e, para cada um desses nomes, usará gzip para descompactar ( -d ) o arquivo na saída padrão ( -c ). A saída é redirecionada para um arquivo em /myoutput . O nome do arquivo será o mesmo do arquivo original, mas sem o sufixo .gz do nome do arquivo ( basename é usado para remover esse bit do nome do caminho, bem como para remover a string /mydata/ inicial).

O comando dentro do loop também pode ser escrito como

gzip -d -o "/myoutput/$( basename "$pathname" .gz )" "$pathname"

que permite que gzip grave o arquivo de saída diretamente em vez de redirecioná-lo.

Isso pressupõe que o arquivo em /mydata seja legível e que você tenha permissão para criar arquivos em /myoutput .

    
por 31.07.2018 / 17:07
1
  • Se você realmente deseja o diretório de destino diretamente sob a raiz, dê a propriedade adequada (e permissões)

    sudo mkdir /myoutput
    sudo chown $USER /myoutput
    
  • Altere o diretório para seu diretório, que contém os arquivos gz .

    cd /mydata
    
  • Execute a seguinte linha de comando

    for i in *.gz;do echo -n "${i/.gz}|";zcat "$i" > "/myoutput/${i/.gz}";done; echo ""
    
por 31.07.2018 / 16:54

Tags