¿Cómo crear un archivo tar dividido o dividido en múltiples archivos?

27

De acuerdo con esta página , uno puede dejar que tar cree un archivo tar "dividido" en archivos de 100 Mb:

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

El problema es que este comando requerirá que proporciones interactivamente un nuevo nombre de archivo para el siguiente archivo, después de que se complete el primer archivo.

¿Alguien sabe de una manera de omitir este paso interactivo y dejar que tar se "divida" automáticamente?

Samuel Lampa
fuente
Relacionado con esto: unix.stackexchange.com/q/61774/6860
sampablokuper el

Respuestas:

20

Eche un vistazo a la --new-volume-scriptopción, que le permite reemplazar el mecanismo de solicitud con un mecanismo diferente o con un nombre de archivo generado. ( (tar.info)Multi-Volume Archivesen la tarpágina de información). El problema splites que necesita catvolver a unir las piezas para hacer cualquier cosa, mientras que un archivo multivolumen debería ser un poco más flexible.

geekosaur
fuente
Eso es cierto, por supuesto.
Eduardo I.
2
¡Gracias, esto es lo que estaba buscando! Ahora descubrí que en realidad hay algunas instrucciones (incluido un ejemplo) disponibles aquí: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa
El problema con esto es que tiene demasiadas tonterías y promueve lo contrario de las aplicaciones de estilo Unix adecuadas.
Jan Kyu Peblik
33

Puede usar dividir para esto:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

Esto le dice a tar que envíe los datos a stdout y se divida para elegirlos desde stdin, además de usar un sufijo numérico ( -d), un tamaño de fragmento ( -b) de 100M y usar 'tardisk' como base para los nombres de archivo resultantes (tardisk00, tardisk01, tardisk02, etc.).

Para extraer los datos después, puede usar esto:

cat tardisk* | tar xzpvf -
Eduardo I.
fuente
1
Pequeña corrección, -des para sufijo numérico, no prefijo.
yclian
8

Por supuesto, la mejor opción para usar es la --new-volume-scriptopción.

Pero, si conoce el tamaño del archivo (en este caso, largefile.tgz), también puede hacer esto:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

Resumen:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(Para -L, especifique tantos como sea necesario para que la suma total de los archivos tar sea mayor que largefile.tgz)

Si está intentando taruna estructura de árbol de directorios

usuario1260486
fuente
1

Lo hice funcionar con los siguientes comandos:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

El único problema es que en part_1.tarrealidad será el último archivo, y los demás se desplazarán por uno. Es decir, en part_2.tarrealidad es la primera parte, y part_k.tares la (n - 1)tercera parte. Arreglar esto con algún script de shell es trivial y se deja como un ejercicio para el lector.

strupo
fuente
1

creará automáticamente archivos de tamaño 1.1GB, si su tar es más grande, puede aumentar el número, por ejemplo 1000 {2..1000} o puede aumentar la entrada al argumento de longitud de cinta.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
GraphicalDot
fuente