Zip nhiều tập tin vào một số tài liệu lưu trữ


13

Chạy Linux. Tôi có một thư mục gồm khoảng 150 tệp CSV lớn; chỉ cần thực hiện zip -9trên chúng sẽ dẫn đến một tệp nguyên khối vẫn còn quá lớn. Tôi muốn nó chỉ đơn giản là nén chúng trong có thể bốn hoặc năm tệp zip của 30-40 CSV mỗi tệp; cách này theo thứ tự hoặc thứ tự zip kéo dài sẽ không thành vấn đề, vì mỗi zip là độc lập. Phải có một cách đơn giản để làm điều này. Bất kỳ đề xuất?

(và có, zip là định dạng ưa thích, nếu có thể)

Câu trả lời:


23

Không phải là -s chuyển đủ? Bạn có thể sử dụng zip -s để chia tệp thành các tệp có kích thước tối đa, ví dụ:

"zip -s 300m <2 gb file>" tạo ra:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

Sau đó "unzip file.zip" sẽ giải nén mọi thứ lại với nhau.


Phiên bản nào của zip này ?? Tôi nhận file.z01 file.z02 ... file.zip unzip file.zipkhông hoạt động trực tiếp (tôi sẽ sử dụng zip -F để kết hợp lại chúng trước). Lưu ý đây không phải là "độc lập" như yêu cầu.
sourcejedi

1
@sourcejedi: Trong câu trả lời này ( superuser.com/a/602736/195224 ) là một số giải thích chi tiết hơn.
mpy

@mpy Tôi biết, tôi vừa viết câu trả lời đó :).
sourcejedi

@sourcejedi: Ồ vâng, bây giờ bạn nói điều đó ...;)
mpy

2

Sử dụng split trên danh sách các tập tin đầu vào :-).

(Chưa được kiểm tra, tôi đã bao gồm các lệnh rm để dọn dẹp, cẩn thận).

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]

Tại sao bạn sử dụng split -C( --line-bytes) mà không phải split -l( --lines)? Điều đó sẽ dễ dự đoán hơn, liên quan đến việc có bao nhiêu tệp CSV trong một kho lưu trữ.
mpy

Tôi lướt qua trang web quá nhanh. Cảm ơn, tôi sẽ sửa nó!
sourcejedi
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.