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 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 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 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 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 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 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.
-amit 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-aweglassen oder die Stückzahl vorher ausrechnen.- Ein Stück ist kein Archiv.
archive.tar.gz.part-00ist das erste Drittel eines Archivs, kein kleines Archiv. Erst zusammensetzen, dann entpacken —tarauf 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
- Jedes Archiv entpacken
- Abgebrochenen Download mit curl fortsetzen
- Dateien kopieren und die Ordnerstruktur behalten
CliAI schreibt Zerteilen, Zusammensetzen und Prüfsummenkontrolle aus einem Satz und zeigt jeden Befehl vor dem Ausführen. In einer Zeile installieren.