Descomprimir solo una cierta cantidad de archivos de un tarball grande

Descomprimir solo una cierta cantidad de archivos de un tarball grande

Tengo un archivo tar grande que está ocupado siendo enviado por FTP desde un sistema remoto a nuestro sistema local.

Quiero saber si es posible comenzar a descomprimir, digamos 50 archivos a la vez para que esos archivos puedan comenzar a procesarse mientras se realiza la transferencia.

Respuesta1

AquíHay una explicación detallada sobre cómo es posible extraer archivos específicos de un archivo. Específicamente, GNU tar se puede utilizar para extraer uno o más archivos de un tarball. Para extraer miembros específicos del archivo, proporcione sus nombres exactos de miembros como argumentos.

Por ejemplo:

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

También puede extraer aquellos archivos que coincidan con un patrón global específico (comodines). Por ejemplo, para extraer de cbz.tar todos los archivos que comienzan con pic, sin importar el prefijo de directorio, puede escribir:

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

Para extraer todos los archivos php, ingrese:

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

Dónde,

-x: indica a tar que extraiga archivos.
-f: especifica el nombre del archivo/nombre tarball.
-v: Detallado (muestra el progreso al extraer archivos).
-j: filtra el archivo a través de bzip2, úsalo para descomprimir archivos .bz2.
-z: filtra el archivo a través de gzip, úsalo para descomprimir archivos .gz.
--wildcards: indica a tar que trate los argumentos de la línea de comando como patrones globales.
--no-anchored: le informa que los patrones se aplican a los nombres de miembros después de cualquier delimitador /.

Respuesta2

tar -tvf tarfile.tar

le da la lista completa de archivos entarfile.tar

tar -xvf tarfile.tar fileToRestore  

Este comando restaura elfileToRestore

Para descomprimir varios archivos, pero no todos, puede:

  • Pones toda la lista de archivos desde tarfile.tardentrotar.txt

    tar -tvf tarfile.tar > tar.txt
    
  • Ahora tar.txttiene la lista completa de archivos tarfile.tar y puede dejar solo los archivos que desea restaurar o con encabezado...

    head -n50 tar.txt > tar2.txt
    

Puedes poner estas líneas en un archivo.

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

O el archivo 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 ""

Y eso es todo

Respuesta3

No probé esto yo mismo, pero ¿qué tal esto?

tar xvf archive.tar | head -n50

Tar genera una línea en STDOUT para cada archivo extraído, luego el headcomando cerrará la tubería después de 50 líneas. Al morir la tubería, esperaría que el alquitrán también muriera.

información relacionada