Come creare un archivio tar suddiviso in, o spanning, più file?


27

Secondo questa pagina , si può lasciare che tar crei un archivio tar "diviso" in file da 100 Mb:

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

Il problema è che questo comando richiederà di assegnare in modo interattivo un nuovo nome file per il file successivo, dopo aver riempito il primo file.

Qualcuno conosce un modo per saltare questo passaggio interattivo e lasciare che tar faccia automaticamente la "divisione"?


Risposte:


20

Dai un'occhiata --new-volume-scriptall'opzione, che ti consente di sostituire il meccanismo di richiesta con un meccanismo diverso o con un nome file generato. ( (tar.info)Multi-Volume Archivesnella tarpagina delle informazioni.) Il problema splitè che è necessario catriunire i pezzi per fare qualsiasi cosa, mentre un archivio multivolume dovrebbe essere un po 'più flessibile.


È vero, certo.
Eduardo I.

2
Grazie, questo è quello che stavo cercando! Ora ho scoperto che in realtà ci sono alcune istruzioni (incl. Esempio) disponibili qui: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa

Il problema con questo è che è un'assurdità eccessivamente coinvolta e promuove il contrario delle app in stile Unix appropriate.
Jan Kyu Peblik,

33

Puoi usare split per questo:

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

Questo dice a tar di inviare i dati a stdout e li divide per selezionarli da stdin - inoltre usando un suffisso numerico ( -d), una dimensione del blocco ( -b) di 100M e usando 'tardisk' come base per i nomi dei file risultanti (tardisk00, tardisk01, tardisk02, ecc.).

Per estrarre i dati in seguito è possibile utilizzare questo:

cat tardisk* | tar xzpvf -

1
Piccola correzione, -dè per il suffisso numerico, non per il prefisso.
yclian,

8

Naturalmente l'opzione migliore da usare è l' --new-volume-scriptopzione.

Ma, se conosci la dimensione del file (in questo caso, largefile.tgz), puoi farlo anche:

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

Sommario:

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

(Per -L, specifica quanti ne servono in modo che la somma totale dei file tar sia maggiore di largefile.tgz)

Se si sta provando taruna struttura ad albero di directory


1

Ho capito che funziona con i seguenti comandi:

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

L'unico problema è che part_1.tarin realtà sarà l'ultimo file e gli altri vengono spostati di uno. Cioè part_2.tarè in realtà la prima parte, ed part_k.tarè la (n - 1)th parte. Risolvere questo problema con alcuni script di shell è banale e lasciato come esercizio per il lettore.


1

creerà automaticamente file di dimensioni 1,1 GB, se il tar è di dimensioni maggiori, è possibile aumentare il numero, ad esempio 1000 {2..1000} oppure aumentare l'input all'argomento lunghezza nastro.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.