Casser un gros fichier en morceaux plus petits

Réponses:

79

Vous pouvez utiliser split et chat .

Par exemple, quelque chose comme

$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.

(où le nom de fichier d'entrée est fooet le dernier argument est le préfixe de sortie). Cela va créer des fichiers comme foo.000 foo.001...

La même commande avec des options courtes:

$ split -b 100k -d -a 3 foo foo

Vous pouvez également spécifier "--line-bytes" si vous souhaitez diviser les lignes au lieu du nombre exact d'octets.

Pour ré-assembler à nouveau les pièces générées, vous pouvez utiliser par exemple:

$ cat foo.* > foo_2

(en supposant que le shell trie les résultats de son déplacement - et que le nombre de pièces ne dépasse pas la limite d'arguments dépendante du système)

Vous pouvez comparer le résultat via:

$ cmp foo foo_2
$ echo $?

(ce qui devrait donner 0)

Vous pouvez également utiliser une combinaison de find / sort / xargs pour réassembler les éléments:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
maxschlepzig
la source
2
Essayez cette commande:man split cat md5sum
Kevin M
6
Lors du montage, je recommande cat foo.{000..NNN}où se NNNtrouve la dernière pièce attendue. De cette façon, vous obtenez un message d'erreur si l'une des pièces est manquante. Mais notez que l’ -dobtention de suffixes numériques est spécifique à la division GNU; sur d' autres plates - formes que vous devez faire avec foo.aaa, foo.aabetc.
de l' arrêt SO- étant mal Gilles
1
Et gardez à l'esprit que, pour split, KB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024 etc.
Zorawar
1
Cela ne devrait pas ... cat > foo_3être ... cat >>foo_3?
alk
1
Si vous décidez de soulager la douleur en utilisant un utilitaire. raret 7zipsont souvent utilisés pour faciliter le réassemblage de ces fractionnements multiplate-forme
infixée le
4

Vous pouvez également le faire avec Archive Manager si vous préférez une interface graphique. Regardez sous "Enregistrer-> Autres options-> Diviser en volumes de".


la source
5
Je l'ai étiquetée 'ligne de commande', mais merci pour la réponse :)
Stefan