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 cdsplitđảm bảo cdthành công, quá .. Lưu ý rằng splitgzipxuấ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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.