CLI AI

Große Datei zerteilen und wieder zusammensetzen

2026-07-28

split -b 10M -d archive.tar.gz archive.tar.gz.part- zerteilt eine Datei in 10-MB-Stücke, und cat archive.tar.gz.part-* > restored.tar.gz setzt sie wieder zusammen. Gleiche Größen beweisen nichts — ehrlich prüft nur der Vergleich der Prüfsummen, und es gibt ein Flag, das Daten verliert, ohne zu scheitern.

1. Nach Größe zerteilen

clai
$ clai zerteile archive.tar.gz in stücke zu 10 megabyte→ split -b 10M -d archive.tar.gz archive.tar.gz.part-10485760 archive.tar.gz.part-0010485760 archive.tar.gz.part-014028480 archive.tar.gz.part-02

-b 10M ist die Stückgröße, -d verlangt numerische Suffixe statt Buchstaben. Das letzte Stück ist kleiner, das gehört so. Der Befehl selbst gibt nichts aus — die Größen oben stammen aus ls -l.

2. Wieder zusammensetzen

clai
$ clai setze die datei aus den stücken wieder zusammen→ cat archive.tar.gz.part-* > restored.tar.gz

Ein eigener "unsplit"-Befehl existiert nicht: der ganze Trick ist cat in Glob-Reihenfolge. Genau deshalb zählen die Suffixe — die numerischen wie die alphabetischen von split sortieren stets richtig.

3. Beweisen, dass es dasselbe ist

clai
$ clai prüfe ob die zusammengesetzte datei dem original entspricht→ sha256sum archive.tar.gz restored.tar.gz93f9298124fc680c archive.tar.gz93f9298124fc680c restored.tar.gz

Die Hashes sind hier auf 16 Zeichen gekürzt, damit sie in eine Zeile passen. Gleiche Dateigröße ist kein Beweis: ein gekipptes Byte innerhalb eines Stücks ändert die Größe überhaupt nicht.

4. Nach Stückzahl statt nach Größe

clai
$ clai zerteile die datei in genau drei teile→ split -n 3 -d archive.tar.gz piece-8333334 piece-008333333 piece-018333333 piece-02

-n teilt in gleich große Teile und gibt den Rest dem ersten. Praktisch, wenn eine Datei auf drei Datenträger soll und nicht unter ein Upload-Limit.

5. Eine Prüfsumme für den Zusammensetzer hinterlassen

clai
$ clai speichere die prüfsumme neben der datei→ sha256sum archive.tar.gz > archive.tar.gz.sha256

Nach dem Zusammensetzen führt die Gegenseite sha256sum -c archive.tar.gz.sha256 aus und bekommt archive.tar.gz: OK. Bei beschädigter Datei erscheint archive.tar.gz: FAILED samt sha256sum: WARNING: 1 computed checksum did NOT match und Exit-Code 1 — geprüft, indem ein einzelnes Byte im zweiten Stück gekippt wurde.

6. Die Falle: feste Suffixlänge

clai
$ clai zerteile die datei in 200-kilobyte-stücke mit zweistelligen suffixen→ split -b 200k -d -a 2 archive.tar.gz fixed-split: output file suffixes exhausted⚠ CAUTION — ein Teil der Datei fehlt, der Exit-Code ist trotzdem 0

Geprüft: -a 2 erlaubt 100 Namen, die Datei braucht 123 Stücke, also schreibt split 100 Dateien, druckt den Fehler und endet dennoch mit 0. Ohne -a verlängert split das Suffix selbst — die Namen laufen small-00…small-89, dann small-9000 — und die Reihenfolge beim Zusammensetzen bleibt korrekt, was die Hashes bestätigen.

Gotchas

  • Gleiche Größen beweisen nichts. Einziges ehrliches Kriterium ist die Prüfsumme des Originals gegen die der zusammengesetzten Datei.
  • -a mit fester Länge verliert Daten stillschweigend. Der Fehler wird gedruckt, der Exit-Code bleibt 0, also arbeitet ein Skript fröhlich mit unvollständigem Stücksatz weiter. Entweder -a weglassen oder die Stückzahl vorher ausrechnen.
  • Ein Stück ist kein Archiv. archive.tar.gz.part-00 ist das erste Drittel eines Archivs, kein kleines Archiv. Erst zusammensetzen, dann entpacken — tar auf einem einzelnen Stück meldet nur ein unerwartetes Dateiende.

Related questions

Wie zerteile ich nach Zeilen statt nach Bytes? split -l 100000 big.csv part- schneidet an Zeilengrenzen, genau richtig für Text und Logs.

Kann split gleichzeitig komprimieren? Nein — erst tar czf, dann das fertige Archiv zerteilen. Die andere Reihenfolge liefert Stücke, die kein Werkzeug lesen kann.

Und wenn die Gegenseite Windows nutzt? Dort fügt man mit copy /b part-00+part-01+part-02 archive.tar.gz zusammen. Entscheidend ist die Reihenfolge in dieser Liste.

See also

CliAI schreibt Zerteilen, Zusammensetzen und Prüfsummenkontrolle aus einem Satz und zeigt jeden Befehl vor dem Ausführen. In einer Zeile installieren.