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
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
gunzip */*.gz
?