Wie kann ich eine Datei teilen und direkt komprimieren?

12

Ich habe eine 100-GB-Datei und möchte diese in 100 1-GB-Dateien aufteilen (nach Zeilenumbruch).

z.B

split --bytes=1024M /path/to/input /path/to/output

Für die 100 generierten Dateien möchte ich gzip / zip auf jede dieser Dateien anwenden.

Ist es möglich, einen einzelnen Befehl zu verwenden?

Ryan
quelle
2
Für bis zu 1 GB pro Datei (weniger, wenn die nächste Zeile es überschreiben würde) verwenden --line-bytes=1024M.
Brian

Antworten:

30

Verwenden Sie "--filter":

split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output

Peter
quelle
das funktioniert bei mir nicht, überschreibt weiterhin die gleiche Datei wie $ FILE ist nicht definiert und schreibt nicht einmal in den des-Ordner.
SPLAISAN
Mein Fehler, einfache Anführungszeichen, um $ FILE zu ersetzen, mein großer Fehler, Entschuldigungen und Dank für die Hilfe: Dieser letzte Befehl hat sich für mich als nützlich erwiesen, um Fastq-Daten zu speichern, die in Blöcken von 4 Zeilen eingehen: 'zcat ERR3152365.fastq.gz | split -a 3 -d -l 1200000 --numerische Suffixe --filter = 'pigz -p 8> $ FILE.fq.gz' - splitout / part_ '
splaisan
0

Ein Einzeiler mit einer Bedingung ist so nah wie möglich.

cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

gzipwird nur dann ausgeführt , wenn splitaufgrund der bedingten erfolgreich ist , &&die auch zwischen den ist cdund splitsicherstellen , dass das cderfolgreich ist, auch .. Beachten Sie, dass splitund gzipAusgang in das aktuelle Verzeichnis stattdessen die Fähigkeit, die das Ausgabeverzeichnis angeben. Sie können das Verzeichnis bei Bedarf erstellen:

mkdir -p /path/to/output && cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

Um alles wieder zusammenzusetzen:

gunzip /path/to/files/x* && cat /path/to/files/x* > /path/to/dest/filename
Bis auf weiteres angehalten.
quelle
0

Wenn Sie diesen Befehl mit der -dOption verwenden, können Sie numerische Sufixe generieren.

split -d -b 2048m "myDump.dmp" "myDump.dmp.part-" && gzip myDump.dmp.part*

Dateien generiert:

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...
Iván
quelle