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?
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.
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 -
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
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
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.