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.tar
dentrotar.txt
tar -tvf tarfile.tar > tar.txt
Ahora
tar.txt
tiene la lista completa de archivostarfile.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 head
comando cerrará la tubería después de 50 líneas. Al morir la tubería, esperaría que el alquitrán también muriera.