ファイルを分割して直接圧縮する方法は?


12

私は100GBのファイルを持っていますが、それぞれを1GBのファイルのうち100個に分割したい(改行によって)

例えば

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

生成された100個のファイルについて、これらの各ファイルにgzip / zipを適用したいと思います。

単一のコマンドを使用することは可能ですか?


2
ファイルごとに最大1GB(次の行で上書きする場合を除く)を使用します--line-bytes=1024M
ブライアン

回答:


30

「--filter」を使用します。

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


これは私にとっては二度とありません。$ FILEが定義されていないので、同じファイルを上書きし続け、desフォルダにも書き込みをしません。
splaisan

私の間違いは、$ FILEを置き換えるために一重引用符を必要とし、私の大きな間違い、謝罪と助けに感謝します:この最後のコマンドは、4行のブロックで来るfastqデータを保存するために働きました: 'zcat ERR3152365.fastq.gz | split -a 3 -d -l 1200000 --numeric-suffixes --filter = 'pigz -p 8> $ FILE.fq.gz'-splitout / part_ '
splaisan

0

条件を使用するワンライナーは、できるだけ近くにあります。

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

gzip場合にのみ実行されますsplitので、条件付きで成功している&&間にもあるcdsplit確認してcdいることを注意...あまりにも、成功するsplitと、gzip代わりに出力ディレクトリを指定する機能を持つことのカレントディレクトリに出力します。必要に応じて、ディレクトリを作成できます。

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

すべてを元に戻すには:

gunzip /path/to/files/x* && cat /path/to/files/x* > /path/to/dest/filename

0

-dオプションでこのコマンドを使用すると、数値の接尾辞を生成できます。

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

生成されたファイル:

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.