Ich habe eine 250GB große Datei unter Linux gezippt und möchte sie in 250 1GB Dateien aufteilen und die generierten Teildateien sofort komprimieren (sobald eine Datei vorhanden ist erzeugt wird, sollte es komprimiert werden). Ich habe versucht, dies mit -Eine .gz Datei in mehrere 1GB komprimierte (.gz) Dateien aufteilen
zcat file.gz | split -b 1G – file.gz.part
Aber diese unkomprimierten Datei erzeugt und das zu Recht. Ich änderte es so aussehen, bekam aber einen Fehler:
zcat file.gz | split -b 1G - file.gz.part | gzip
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
ich das auch versucht, und es hat keinen Fehler werfen, aber nicht die Teiledatei komprimieren, sobald sie erzeugt werden. Ich nehme an, dass dies jede Datei komprimieren wird, wenn die gesamte Aufteilung abgeschlossen ist (oder es kann alle Teildateien packen und eine einzelne gz-Datei erstellen, sobald die Aufteilung abgeschlossen ist, bin ich mir nicht sicher).
zcat file.gz | split -b 1G - file.gz.part && gzip
Ich las here, dass es eine Filteroption ist, aber meine Version von Split ist (GNU coreutils) 8,4, damit die Filter nicht unterstützt wird.
$ split --version
split (GNU coreutils) 8.4
Bitte geben Sie einen geeigneten Weg, um dies zu erreichen, vorzugsweise einen Einzeiler Code (falls möglich) oder eine Shell (bash/KSH) Skript wird auch funktionieren.
Ich würde empfehlen, Ihre eigene "Split mit Gzip" Variante in einer Skriptsprache zu schreiben. Weil sonst müssen Sie diese 250 GB-Datei viele Male lesen (zuerst bestimmen Sie ihre Größe und dann in der Schleife immer einen Spleiß und gzip es) – MacHala
Wie wichtig ist es, dass die Teile unabhängig dekomprimierbar sein können? Wenn Sie einfach 'split -b 1G file.gz' ausführen, erhalten Sie 250 Dateiparts, die Sie zusammen katapultieren und dann dekomprimieren können. –