gunzip de stdin

3

Eu tenho uma grande coleção de arquivos gz. Eu quero extrair todos eles. Aqui está o que eu estava tentando fazer:

find . | grep .gz | gunzip

No entanto, gunzip não aceita lista de arquivos do stdinput. Como posso descompactar todos eles (no lugar)?

    
por MatthewRock 15.12.2015 / 23:54

2 respostas

6

Se o que você procura é chamar gunzip em cada arquivo com um nome terminando em .gz em qualquer lugar dentro do seu diretório atual, isso deve isso:

find . -type f -name '*.gz' exec gunzip {} +

A maneira mais geral de transformar o que está na entrada padrão em argumentos para um comando é usar xargs, mas há algumas dicas para estar ciente de com esse comando.

    
por 16.12.2015 / 00:10
3

Talvez uma abordagem melhor seja usar as opções find -name e -exec ? Dessa forma, o grep seria desnecessário e poderia entregar cada arquivo correspondente para gunzip , individualmente.

Isso seria algo como:

find . -name '*.gz' -exec gunzip '{}' +

Todos os arquivos dentro de $CWD (incluindo os subdiretórios), com nomes terminados em .gz , serão entregues a gunzip para descompactação. Além disso, os arquivos descompactados acabariam no $CWD sem tomar medidas adicionais.

    
por 16.12.2015 / 00:12

Tags