Làm cách nào để nén một thư mục lớn thành các tệp nhỏ giới hạn ở 20Mb?


10

Tôi đang tìm cách để nén một thư mục lớn vào nhiều tệp 20Mb. Tôi không muốn tệp zip được chia thành các tệp nhỏ hơn. Thay vào đó tôi muốn nhóm một số tệp / thư mục phụ thành các nhóm có dung lượng 20Mb khi được nén.

Nếu bạn biết làm thế nào để làm như vậy, xin vui lòng giúp đỡ!

Cập nhật

Tôi cần phải sử dụng các tệp nén nhỏ hơn một mình mà có thể được giải nén một mình.

Ý định của tôi là sử dụng virustotal.com để quét một thư mục lớn.


Bất kỳ chi tiết nào về hệ điều hành bạn đang sử dụng?
Pitto

@Pitto Tôi sử dụng Windows-7
Nam G VU

Câu trả lời:


10

Trong winzip: Thêm các tệp vào zip bằng cách khởi động winzip và thêm hoặc kéo và thả vào winzip hoặc nhấp chuột phải vào các tệp và winzip 'add to zip ...'

Sau đó trong winzip:

Hành động - Tách ở dưới cùng của 'kích thước phần' chọn 'kích thước khác' rồi đặt 20 và chọn mb

Làm xong!


4
Ở bên miễn phí cũng 7zip hoạt động hoàn hảo :)
Pitto

3
Điều này sẽ phân chia tệp zip và chúng tôi không thể sử dụng các phần được tách một mình.
Nam G VU

Bây giờ tôi hiểu rõ hơn những gì bạn đang tìm kiếm ... Tôi chỉ không thể tìm thấy bất kỳ loại giải pháp nào cho vấn đề của bạn, sau đó :( Còn việc sử dụng Malwarebytes Antimalware miễn phí và tuyệt vời để quét các tệp cục bộ thì sao?
Pitto

6

Những gì bạn đang đề xuất về cơ bản là một biến thể của Vấn đề Knapsack , với sự thay đổi được thêm vào, do nén tệp, bạn không bắt đầu biết số tiền "ba lô" 20 MB của mình sẽ chiếm bao nhiêu.

Tất nhiên, giải pháp tầm thường sẽ chỉ đơn giản là nén từng tệp một cách độc lập, nhưng điều đó không làm giảm số lượng tệp bất kỳ, vì vậy tôi nghi ngờ nó sẽ không phải là một giải pháp thỏa đáng.

Nếu tôi gặp vấn đề này, tôi cho rằng tôi sẽ bắt đầu bằng cách nén từng tệp riêng lẻ vào một vị trí tạm thời (hoặc trong bộ nhớ, mà không ghi chúng vào đĩa), để tôi có thể có kích thước nén xấp xỉ cho mỗi tệp. Với thông tin đó, sau đó có thể quyết định các tệp nào sẽ được nhóm lại với nhau theo bất kỳ phương pháp tiếp cận tiêu chuẩn nào cho Vấn đề Knapsack và tạo các tệp zip thực tế.

Giả sử bạn có sẵn một ngôn ngữ kịch bản cho bạn và bạn biết cách sử dụng nó, tôi sẽ hy vọng cách tiếp cận này khá đơn giản để tự động hóa; thực hiện thủ công sẽ khá tẻ nhạt nếu bạn có nhiều hơn một số tệp để xử lý ...


1
bạn có thể không nén với 'không nén' không? Nhìn vào "cập nhật" của op, có vẻ như định dạng tệp quan trọng hơn nén.
đắt tiền

1
Heh ... Điểm tốt. Tôi đã không xem việc sử dụng zip như một kho lưu trữ đơn giản mà không cần nén.
Dave Sherohman

@DaveSherohman Vậy làm thế nào chúng ta có thể làm điều đó sau đó?
Nam G VU

5

Để zip thực hiện việc chia tách cho bạn sẽ dễ dàng tự động hóa hơn nhiều so với việc tự mình tìm ra nó. Nếu mục tiêu của bạn là các tệp zip 20 MB, bạn sẽ phải ước tính kích thước nén của mỗi tệp trước khi thêm nó vào kho lưu trữ. Có một lý do nào bạn không muốn chỉ để zip thực hiện việc chia tách cho bạn? Đây là cách bạn làm điều đó với gnu zip:

zip -s 20m -r myzip.zip mydir

Điều này sẽ tạo ra các tệp nén 20 MB với số chỉ mục tăng dần trong tên tệp.


4
Dựa trên nhận xét của OP cho câu trả lời khác, có vẻ như anh ấy không muốn zip tự động phân tách nó bởi vì sau đó bạn có một kho lưu trữ duy nhất yêu cầu tất cả các tệp hoạt động chính xác, nhưng anh ấy muốn mỗi phần là một kho lưu trữ hoàn chỉnh, có thể sử dụng được, độc lập của những người khác.
Dave Sherohman

4

Trên Linux có một chương trình tên là zipsplit thực hiện chính xác điều này. Đây là một phần của gói zip tiêu chuẩn.

Nó có thể được chạy như thế này:

zipsplit bigfile.zip -n 20000000

để chia bigfile.zip thành các phần tối đa 20MB. Và lưu ý rằng các tệp chứa riêng lẻ sẽ không bị chia tách. Do đó, mỗi phần có thể được giải nén riêng lẻ. Điều đó cũng có nghĩa là nếu có một tệp duy nhất không vừa với kích thước phần tối đa thì việc chia tách sẽ không thể thực hiện được.

Cập nhật: Dường như cũng có các tệp nhị phân cho Windows tại info-zip.org, cụ thể là trong ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip cho Win 64.


3

Tôi không sợ một viễn cảnh dễ dàng.

Gần đây tôi đã viết một tập lệnh để thu thập các tệp vào các thư mục con không lớn hơn 4,3 GB để dễ dàng lưu trữ trên DVD, nhưng tất cả đều không bị nén.

Làm điều đó với nén - bây giờ có thách thức. Bạn không thể dự đoán kích thước của các tệp sau khi nén - tất cả những gì bạn có thể làm là tiếp tục thêm tệp vào zip theo thứ tự kích thước giảm dần cho đến khi vượt quá 20MB và sau đó xóa tệp cuối cùng thay thế bằng tệp nhỏ hơn cho đến khi giảm xuống dưới 20 MB . Nếu bạn xả hết tất cả các tệp và nó vẫn> 20 MB thì chỉ cần thả tệp cuối cùng và chuyển sang zip tiếp theo.

Khá một chút khó khăn của kịch bản và một quá trình khá chậm, đau đớn.


Đây là suy nghĩ của tôi. Tại sao không chỉ đơn giản là nhóm các tệp / thư mục vào <= 20Mb giải nén nhóm sau đó nén chúng? Chúng tôi không cần các tệp kết quả .zip chính xác là 20Mb mỗi tệp.
Nam G VU

Có thể - không chắc chắn về cách bạn thực hiện điều đó trong các cửa sổ với kịch bản - tôi đã sử dụng Perl trên Linux trước đây.
Majenko

2

Tôi biết đây là một chủ đề cũ, nhưng tôi chỉ làm điều này với 7-zip .

Bạn cần sử dụng tùy chọn "Chia thành âm lượng":

nhập mô tả hình ảnh ở đây


Mát mẻ. Tôi sẽ thử và quay lại với bạn sau.
Nam G VU

1
Không hoạt động cho kịch bản cụ thể này vì các tệp nén nhỏ hơn không thể được giải nén một mình; chúng phải được giữ lại với nhau.
mạnh mẽ vào

2

Dave dường như cung cấp giải pháp lập trình gần nhất với những gì OP yêu cầu. Tôi đã tìm ra rằng điều này cũng có thể được thực hiện thủ công , nếu các giả định sau đây được thực hiện (đây không phải là một vấn đề kỹ thuật thuần túy. Đây là một vấn đề tổ chức hơn là kỹ thuật):

  1. OP yêu cầu mỗi tệp zip phải có thể trích xuất tất cả nội dung của nó một cách độc lập , các tệp vượt quá 20 MB sau khi nén phải được xử lý theo một trong các cách sau:
    • chúng không được xem xét, và do đó phải được tách ra;
    • chúng cần được chia thành 20 MB, như các câu trả lời khác được đề xuất ( winzip , 7-zip ) và các tệp kết quả có thể được sử dụng độc lập (phá vỡ giả định thứ 1 này ).
  2. Các tệp nén không nhất thiết phải có chính xác 20 MB.
  3. Nếu điều quan trọng hơn là có một vài tệp zip với kích thước xấp xỉ 20 MB, thì việc nén có thể được thực hiện mà không cần nén.

Bằng cách sử dụng phương pháp này với 7-zip (giao diện và thiết bị đầu cuối của Windows) tôi đã duy trì việc nén trong các tệp zip mới được tạo.

Bắt đầu bằng cách nén tất cả các tệp vào một tệp zip trong một thư mục trống (với phương thức nén mong muốn của bạn), ví dụ ALL.zipvà mở tệp:

  1. Sắp xếp danh sách các tập tin và thư mục bằng cách nhấp vào cột kích thước hoặc kích thước đóng gói (nén);
  2. Bắt đầu từ các kích thước nhỏ nhất và chọn các tệp / thư mục mà bạn muốn nhóm thành một zip;
  3. Nhấn Testnút để xác nhận kích thước tập thể của họ (điều này xem xét việc nén của họ): Tính năng kiểm tra
  4. Nhấn nút Extracthoặc Copytrong khi thêm vào cuối đường dẫn trích xuất một tên thư mục mới (ví dụ plu_8MB:)
  5. Bên trong ALL.zipzip, xóa các tệp bạn vừa trích xuất (tránh trích xuất lại nhầm) và điều hướng đến thư mục hoặc tập hợp con tiếp theo của tệp;
  6. Lặp lại một trong những điều sau đây:
    • bước 1 đến 5 nếu bạn định tạo một tệp zip độc lập;
    • bước 1 đến 3 và sử dụng lại cùng tên thư mục (bước 4) cho đến khi kích thước tập thể của chúng xấp xỉ 20MB;
  7. Khi bạn đã trích xuất tất cả nội dung của các ALL.zipthư mục độc lập, hãy xóa mã zip đó và mở thiết bị đầu cuối trong thư mục đó ;
  8. Kiểu:

    for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
    

    Nhấn ENTERvà điều này sẽ tạo một tệp zip cho mỗi thư mục mà bạn vừa giải nén.


Đối với các tham số khác nhau trong giải nén, đây là tài liệu cú pháp 7zip .
CPHPython
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.