web-dev-qa-db-fra.com

Fractionner des fichiers à l'aide de tar, gz, Zip ou bzip2

J'ai besoin de compresser un fichier volumineux d'environ 17-20 Go. Je dois le scinder en plusieurs fichiers d'environ 1 Go par fichier.

J'ai cherché une solution via Google et trouvé des moyens d'utiliser les commandes split et cat. Mais ils ne fonctionnaient pas du tout pour les gros fichiers. En outre, ils ne fonctionneront pas sous Windows. J'ai besoin de l'extraire sur une machine Windows.

134
Aka

Vous pouvez utiliser la commande split avec l'option -b:

split -b 1024m file.tar.gz

Il peut être ré-assemblé sur une machine Windows en utilisant la réponse de @ Joshua .

copy /b file1 + file2 + file3 + file4 filetogether

Edit : Comme @Charlie l'a déclaré dans le commentaire ci-dessous, vous pouvez définir un préfixe de manière explicite, car il utilisera x sinon, ce qui peut prêter à confusion.

split -b 1024m "file.tar.gz" "file.tar.gz.part-"

// Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ...

Éditer : Éditer le message car la question est close et la solution la plus efficace est très proche du contenu de cette réponse:

# create archives
$ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_
# uncompress
$ cat myfiles_split.tgz_* | tar xz

Cette solution évite d'avoir à utiliser un fichier volumineux intermédiaire lors de la (dé) compression. Utilisez l'option tar -C pour utiliser un répertoire différent pour les fichiers résultants. btw si l'archive est constituée d'un seul fichier, tar peut être évité et seul gzip utilisé:

# create archives
$ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_
# uncompress
$ cat myfile_split.gz_* | gunzip -c > my_large_file

Pour Windows, vous pouvez télécharger des versions portées des mêmes commandes ou utiliser cygwin.

242
matpie

Si vous vous séparez de Linux, vous pouvez toujours réassembler Windows.

copy /b file1 + file2 + file3 + file4 filetogether
25
Joshua

utiliser tar pour divisé en plusieurs archives

il existe de nombreux programmes qui fonctionnent avec les fichiers tar sur Windows, y compris Cygwin.

9
Tim Hoolihan

Le code testé crée initialement un seul fichier d’archive, puis le scinde:

 gzip -c file.orig > file.gz
 CHUNKSIZE=1073741824
 PARTCNT=$[$(stat -c%s file.gz) / $CHUNKSIZE]

 # the remainder is taken care of, for example for
 # 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers
 # all of file
 for n in `seq 0 $PARTCNT`
 do
       dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1
 done

Cette variante omet de créer un seul fichier d'archive et passe directement à la création de pièces:

gzip -c file.orig |
    ( CHUNKSIZE=1073741824;
        i=0;
        while true; do
            i=$[i+1];
            head -c "$CHUNKSIZE" > "part.$i";
            [ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break;
        done; )

Dans cette variante, si la taille du fichier de l'archive est divisible par $CHUNKSIZE, le dernier fichier partiel aura une taille de 0 octets.

7
Adrian Panasiuk