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

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

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

Quero saber se é possível começar a descompactar, digamos, 50 arquivos por vez, para que esses arquivos possam começar a ser processados ​​enquanto a transferência ocorre.

Responder1

Aquié uma explicação detalhada sobre como é possível extrair arquivos específicos de um arquivo. Especificamente, o GNU tar pode ser usado para extrair um único ou mais arquivos de um tarball. Para extrair membros específicos do arquivo, 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 globbing específico (curingas). Por exemplo, para extrair de cbz.tar todos os arquivos que começam com pic, independentemente do prefixo do 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 a extrair arquivos.
-f: especifica o nome do arquivo/nome do tarball.
-v: Verbose (mostra o progresso durante a extração de arquivos).
-j: filtre o arquivo através do bzip2, use para descompactar arquivos .bz2.
-z: filtre o arquivo através do gzip, use para descompactar arquivos .gz.
--wildcards: instrui o tar a tratar os argumentos da linha de comando como padrões globais.
--no-anchored: informa que os padrões se aplicam aos nomes dos membros após qualquer delimitador /.

Responder2

tar -tvf tarfile.tar

fornece a lista completa de arquivos emtarfile.tar

tar -xvf tarfile.tar fileToRestore  

Este comando restaura ofileToRestore

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

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

    tar -tvf tarfile.tar > tar.txt
    
  • Agora tar.txttem toda a lista de arquivos tarfile.tar e você pode deixar apenas os arquivos que deseja restaurar ou com head...

    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

Responder3

Não tentei isso sozinho, mas que tal isto:

tar xvf archive.tar | head -n50

Tar gera uma linha para STDOUT para cada arquivo extraído, então o headcomando encerrará o pipe após 50 linhas. Após a morte do cano, eu esperaria que o alcatrão também morresse.

informação relacionada