Descompacte apenas um certo número de arquivos de um tarball grande

12

Eu tenho um tarball grande que está ocupado sendo transferido por FTP de um sistema remoto para o nosso sistema local.

Eu quero saber se é possível começar a descompactação, digamos 50 arquivos por vez, para que esses arquivos possam começar a ser processados enquanto a transferência ocorre.

    
por Pieter van Niekerk 03.07.2012 / 08:20

3 respostas

10

Aqui é uma explicação detalhada de como é possível extrair arquivos específicos de um arquivo. Especificamente, o tar GNU pode ser usado para extrair um único ou mais arquivos de um tarball. Para extrair membros do arquivo específico, forneça os nomes exatos dos membros como argumentos.

Por exemplo:

tar --extract --file={tarball.tar} {file}

Você também pode extrair os arquivos que correspondem a um padrão de globbing específico (curingas). Por exemplo, para extrair de cbz.tar todos os arquivos que começam com pic, não importa o prefixo de diretório, você pode digitar:

tar -xf cbz.tar --wildcards --no-anchored 'pic*'

Para extrair todos os arquivos php, digite:

tar -xf cbz.tar --wildcards --no-anchored '*.php'

Onde,

-x : instrui o tar para extrair arquivos.
-f : especifica o nome do arquivo / tarball.
-v : Detalhado (mostra o progresso ao extrair arquivos).
-j : filter arquivar através do bzip2, use para descompactar arquivos .bz2.
-z : filtre o archive através do gzip, use para descompactar arquivos .gz.
--wildcards : instrui o tar para tratar os argumentos da linha de comando como padrões de globbing. > --no-anchored : informa que os padrões se aplicam a nomes de membros após qualquer delimitador.

    
por 03.07.2012 / 08:31
2

Não tentei isso sozinho, mas e quanto a isso:

tar xvf archive.tar | head -n50

Tar envia uma linha para STDOUT para cada arquivo extraído, então o comando head irá matar o pipe após 50 linhas. Quando o tubo morrer, eu esperaria que o alcatrão morresse também.

    
por 03.07.2012 / 09:52
1
tar -tvf tarfile.tar

fornece toda a lista de arquivos em tarfile.tar

tar -xvf tarfile.tar fileToRestore  

Este comando restaura o fileToRestore

Para descompactar vários arquivos, mas não todos eles, você pode:

  • Você coloca toda a lista de arquivos de tarfile.tar em tar.txt

    tar -tvf tarfile.tar > tar.txt
    
  • Agora, tar.txt tem toda a lista de arquivos em tarfile.tar e você pode deixar apenas os arquivos que deseja restaurar ou com a cabeça ...

    head -n50 tar.txt > tar2.txt
    

Você pode colocar essas linhas em um arquivo

cat tar.txt|while read line
do
   tar -xvf tarfile.tar ${line}
done

Ou o arquivo de script completo:

#!/bin/bash

if [[ "$1" = "" || "$2" = "" ]]
   then
   echo ""
   echo "Uso: untar-list.sh tarfile.tar listfile.txt"
   echo ""
   exit 1
fi

tarfile=$1
file=$2

if [[ ! -f ${tarfile} ]]
   then
   echo ""
   echo "Archivo ${tarfile} no existe"
   echo ""
   exit 1
fi

if [[ ! -f ${file} ]]
   then
   echo ""
   echo "Archivo ${file} no existe"
   echo ""
   exit 1
fi

cat ${file}|while read line
do
  tar -xvf ${tarfile} ${line}
done

echo ""
echo "Finalizado"
echo ""

E isso é tudo

    
por 15.09.2014 / 04:26

Tags