Eu tenho um diretório onde existem várias pastas, cada uma delas contém um arquivo .gz. Como posso descompactar todos eles de uma vez?

Meus dados têm esta aparência

Lista de pastas

A B C D 

Em cada um deles há um arquivo como

A a.out.gz B b.out.gz C c.out.gz D d.out.gz 

Comentários

  • gunzip */*.gz?

Resposta

Isso usa gunzip para descompactar todos os arquivos em uma pasta e ter o final .out.gz

gunzip */*.out.gz 

Isso fará um “loop” * por todas as pastas que contêm um arquivo compactado. Deixe-me adicionar um exemplo:

A a.out.gz B b.out.gz C c.out.gz D d.out.gz E e.out 

Usando o comando acima, a.out.gz b.out.gz c.out.gz d.out.gz será descompactado, mas não “tocará em e.out uma vez que não está compactado.

* Isso é chamado de globbing ou expansão do nome do arquivo . Você pode querer ler mais sobre isso aqui .

Comentários

  • Mas e se eu tiver várias pastas, cada uma contendo um arquivo zip. Como posso fazer um loop em todas as pastas?
  • o */*.out.gz fará um loop em todas as pastas (é ' é o */ parte)
  • @HoHoHo como mazs aponta, isso faz " loop ". Eu ' adicionei alguma explicação extra e um link para uma página que explica melhor o conceito 🙂

Resposta

find . -type f -name "*.gz" -execdir gunzip {} \; 

a opção execdir para localizar faz com que “find” para “cd” em cada diretório e execute o comando exec (gunzip em neste caso) e depois “cd” de volta para o cwd

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *