bash gunzip | descompactar vários arquivos em pastas separadas

3

Eu tenho uma lista de arquivos .tar.gz com a mesma estrutura de pasta interna e eu gostaria de agrupar o gunzip | untar um único arquivo deles em pastas separadas.

logs_2013-08-01.tar.gz
logs_2013-08-02.tar.gz
logs_2013-08-03.tar.gz
logs_2013-08-04.tar.gz
logs_2013-08-05.tar.gz

Eu sei que o comando para descompactar um único arquivo é

tar -xvf {tarball.tar} {path/to/file}  

E adicionando o -C para especificar a pasta de saída, o comando para um único arquivo se parece com:

tar -xvf logs_2013-08-01.tar.gz -C 2013-08-01/ /var/logs/audit

Mas como posso fazer um loop para descompactar tudo?

    
por sergei 22.08.2013 / 08:27

3 respostas

3

Você pode tentar isso (testado no Linux / bash):

for pkg in logs_*.tar.gz; do
   where="${pkg#logs_}"
   where="${where%.tar.gz}/"

   [ -d "$where" ] || mkdir "$where"

   tar zxfv $pkg -C "$where" /var/logs/audit
done

Simplesmente, você faz um loop sobre todos os arquivos tgz no diretório atual, então pega a parte "date" de seu nome, cria o diretório requerido e extrai-os finalmente.

    
por 22.08.2013 / 09:00
3

Use atool(1) . Já está empacotado para muitas distribuições.

Basta executar:

$ atool -x -e *.tar.gz

para descompactar e descompactar todos os arquivos em seu próprio diretório.

    
por 22.08.2013 / 08:30
2

Você pode simplesmente fazer um loop pelos arquivos como este

#!/bin/bash
# Pass the name of the file to unpack on the command line $1
for file in *.gz
do
    dir=$(echo "$file" | cut -c 6-15)
    tar -xvf "$file" -C "$dir" "$1"
done
    
por 22.08.2013 / 08:52

Tags