Làm thế nào để tách một tập tin và nén trực tiếp?


12

Tôi có một tệp 100 GB và tôi muốn chia thành 100 tệp 1 GB mỗi lần (theo dòng ngắt)

ví dụ

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

Đối với 100 tệp được tạo, tôi muốn áp dụng gzip / zip cho mỗi tệp này.

Có thể sử dụng một lệnh duy nhất?


2
Tối đa 1GB cho mỗi tệp (ít hơn nếu dòng tiếp theo sẽ đưa nó qua) sử dụng --line-bytes=1024M.
— Brian

Câu trả lời:


30

Sử dụng "- bộ lọc":

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


điều này không gây khó khăn cho tôi, tiếp tục ghi đè cùng một tệp vì $ FILE không được xác định và thậm chí không ghi vào thư mục des.
— splaisan

lỗi của tôi, cần một dấu ngoặc đơn để thay thế $ FILE, lỗi lớn của tôi, xin lỗi và cảm ơn vì sự giúp đỡ: lệnh cuối cùng này đã giúp tôi lưu dữ liệu fastq trong các khối gồm 4 dòng: 'zcat ERR3152365.fastq.gz | split -a 3 -d -l 1200000 --numeric-hậu tố --filter = 'pigz -p 8> $ FILE.fq.gz' - splitout / part_ '
— splaisan

0

Một lớp lót sử dụng một điều kiện là gần như bạn có thể đến.

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

gzipsẽ chỉ chạy nếu splitthành công vì điều kiện &&cũng nằm giữa cdvà splitđảm bảo cdthành công, quá .. Lưu ý rằng splitvà gzipxuất ra thư mục hiện tại thay vì có khả năng chỉ định thư mục đầu ra. Bạn có thể tạo thư mục, nếu cần:

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

Để đặt tất cả lại với nhau:

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

0

Sử dụng lệnh này với -dtùy chọn cho phép bạn tạo sufixes số.

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

Tập tin được tạo:

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.