web-dev-qa-db-fra.com

Comment créer des archives tar divisées en plusieurs fichiers?

Selon cette page , on peut laisser tar créer une archive tar "divisée" en fichiers de 100 Mo:

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

Le problème est que cette commande nécessitera que vous donniez de manière interactive un nouveau nom de fichier pour le fichier suivant, une fois le premier fichier rempli.

Quelqu'un sait-il qu'il est possible d'ignorer cette étape interactive et de laisser le tar se "séparer" automatiquement?

23
Samuel Lampa

Examinez l'option --new-volume-script, qui vous permet de remplacer le mécanisme d'invite par un mécanisme différent ou par un nom de fichier généré. ((tar.info)Multi-Volume Archives dans la page d'informations tar.) Le problème avec split est que vous devez cat reconstituer les éléments pour pouvoir faire quoi que ce soit, alors qu'une archive multivolume devrait être un peu plus flexible.

18
geekosaur

Vous pouvez utiliser split pour cela:

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

Ceci indique à tar d’envoyer les données à stdout et à Split de les sélectionner à stdin - en utilisant un suffixe numérique (-d), une taille de bloc (-b) de 100 Mo et en utilisant 'disk' comme base pour les noms de fichiers obtenus (tardisk00, tardisk01, etc.).

Pour extraire les données après, vous pouvez utiliser ceci:

cat tardisk* | tar xzpvf -
31
Eduardo I.

Bien sûr, la meilleure option à utiliser est l'option --new-volume-script.

Mais, si vous connaissez la taille du fichier (dans ce cas, largefile.tgz), vous pouvez aussi le faire:

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

Résumé:

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

(Pour le -L, spécifiez autant que nécessaire afin que la somme totale des fichiers tar soit supérieure à largefile.tgz)

Si vous essayez de tar une arborescence de répertoires

7
user1260486

il créera automatiquement des fichiers de taille 1,1 Go; si votre fichier tar est plus volumineux, vous pouvez augmenter le nombre, par exemple, 1000 {2..1000} ou vous pouvez augmenter le nombre d'entrées en argument de longueur de bande.

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

Je l'ai fait fonctionner avec les commandes suivantes:

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

Le seul problème est que part_1.tar sera en fait le dernier fichier et que les autres sont décalés d’un fichier. C'est à dire. part_2.tar est en fait la première partie et part_k.tar est le (n - 1)th partie. La solution à ce problème avec un script Shell est triviale et reste un exercice pour le lecteur.

0
strupo