Jak spakować duży folder do małych plików o rozmiarze do 20 Mb?


10

Szukam sposobu na spakowanie dużego folderu do wielu plików 20 Mb. Nie chcę dzielenia pliku zip na mniejsze. Zamiast tego chcę pogrupować niektóre pliki / foldery podrzędne w grupy, które po spakowaniu mają rozmiar 20 Mb.

Jeśli wiesz, jak to zrobić, pomóż!

Aktualizacja

Muszę użyć samych mniejszych spakowanych plików, które można rozpakować samodzielnie.

Mam zamiar użyć virustotal.com do przeskanowania dużego folderu.


Jakieś szczegóły dotyczące używanego systemu operacyjnego?
Pitto,

@Pitto Używam Windows-7
Nam G VU

Odpowiedzi:


10

W winzip: dodaj pliki do zipu, uruchamiając winzip i dodając lub przeciągnij i upuść do winzip lub kliknij prawym przyciskiem myszy pliki i winzip „dodaj do zip ...”

Następnie w winzip:

Działania - Podziel u dołu „rozmiaru części” wybierz „inny rozmiar”, a następnie umieść 20 i wybierz mb

Gotowy!


4
Pozostając po stronie wolnej również 7zip działa idealnie :)
Pitto

3
Spowoduje to podzielenie pliku zip i nie będziemy mogli używać podzielonych części samodzielnie.
Nam G VU

Omg teraz lepiej rozumiem, co szukasz ... po prostu nie mogę znaleźć żadnego rodzaju rozwiązanie dla Ciebie problem, a następnie :( Co na temat korzystania z wolnego i wspaniałą Malwarebytes 'Anti-Malware do skanowania plików lokalnie?
Pitto

6

To, co proponujesz, jest zasadniczo odmianą problemu plecakowego, z dodatkowym zwrotem, że dzięki kompresji plików nie zaczynasz wiedzieć, ile zajmie twój „plecak” 20 MB na każdy przedmiot.

Oczywiście trywialnym rozwiązaniem byłoby po prostu skompresowanie każdego pliku osobno, ale to nie zmniejsza liczby plików, więc podejrzewam, że nie byłoby to zadowalające rozwiązanie.

Gdybym mi przedstawił ten problem, przypuszczam, że zacznę od kompresji każdego pliku osobno do tymczasowej lokalizacji (lub w pamięci, bez zapisywania ich na dysku), tak aby uzyskać przybliżony rozmiar skompresowanego dla każdego z nich. Dzięki tym informacjom można by następnie zdecydować, które pliki powinny zostać zgrupowane przy użyciu dowolnego standardowego podejścia do problemu plecaka i utworzyć rzeczywiste pliki zip.

Zakładając, że masz do dyspozycji język skryptowy i wiesz, jak go używać, oczekiwałbym, że takie podejście będzie dość łatwe do zautomatyzowania; zrobienie tego ręcznie byłoby dość żmudne, jeśli masz więcej niż garść plików do poradzenia sobie ...


1
nie możesz zipować bez kompresji? Patrząc na „aktualizację” op, wydaje się, że format pliku jest ważniejszy niż kompresja.
Drogi

1
Heh ... Dobra uwaga. Nie brałem pod uwagę użycia zip jako zwykłego archiwum bez kompresji.
Dave Sherohman,

@DaveSherohman Więc jak możemy to zrobić?
Nam G VU

5

Pozwolenie zipowi na podział będzie o wiele łatwiejsze do zautomatyzowania niż próba samodzielnego zrozumienia tego. Jeśli Twoim celem jest 20 MB plików zip, musisz oszacować skompresowany rozmiar każdego pliku przed dodaniem go do archiwum. Czy istnieje powód, dla którego nie chcesz po prostu pozwolić zipowi wykonać podziału za Ciebie? Oto, jak zrobiłbyś to z gnu zip:

zip -s 20m -r myzip.zip mydir

Spowoduje to utworzenie 20 MB spakowanych plików z przyrostowymi numerami indeksów w nazwie pliku.


4
Na podstawie komentarza OP do innej odpowiedzi, brzmi to tak, jakby nie chciał, aby zip automatycznie go podzielił, ponieważ wtedy dostajesz jedno archiwum, które wymaga, aby wszystkie pliki działały poprawnie, ale chce, aby każdy fragment był kompletnym, użytecznym archiwum, niezależnym z innych.
Dave Sherohman,

4

W systemie Linux istnieje program o nazwie zipsplit , który właśnie to robi. Jest to część standardowego pakietu zip.

Można go uruchomić w następujący sposób:

zipsplit bigfile.zip -n 20000000

podzielić plik bigfile.zip na części o maksymalnej wielkości 20 MB. I pamiętaj, że poszczególne zawarte pliki nie zostaną podzielone. W ten sposób każdą część można rozpakować indywidualnie. Co oznacza również, że jeśli istnieje jeden plik, który nie mieści się w maksymalnym rozmiarze części, podział nie będzie możliwy.

Aktualizacja: Wygląda na to, że istnieją również pliki binarne dla systemu Windows na info-zip.org, szczególnie na ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip dla Win 64.


3

Obawiam się, że nie jest to łatwa perspektywa.

Niedawno napisałem skrypt do gromadzenia plików w podkatalogach nie większych niż 4,3 GB w celu łatwego przechowywania na DVD, ale wszystko to było nieskompresowane.

Robiąc to z kompresją - teraz jest wyzwanie. Nie można przewidzieć rozmiaru plików po kompresji - wszystko, co możesz zrobić, to dodawać pliki do pliku zip w malejącej kolejności, aż przekroczy 20 MB, a następnie usuń ostatni plik, zastępując go mniejszym, aż spadnie poniżej 20 MB . Jeśli wyczerpiesz wszystkie pliki, a nadal jest to> 20 MB, po prostu upuść ostatni plik i przejdź do następnego pliku zip.

Dość skomplikowany skrypt i raczej powolny, bolesny proces.


Oto moja myśl. Dlaczego nie po prostu zgrupować plików / folderów w rozpakowaną grupę <= 20 Mb, a następnie spakować je? Nie potrzebujemy plików wynikowych .zip o wielkości dokładnie 20 Mb.
Nam G VU

Możliwe - nie jestem pewien, jak byś to robił w systemie Windows ze skryptami - wcześniej korzystałem z Perla w systemie Linux.
Majenko,

2

Wiem, że to stary wątek, ale właśnie zrobiłem to z 7-suwakiem .

Musisz użyć opcji „Podziel na wolumin”:

wprowadź opis zdjęcia tutaj


Fajne. Spróbuję wrócić z tobą później.
Nam G VU

1
Nie działa w tym konkretnym scenariuszu, ponieważ mniejszych spakowanych plików nie można rozpakować samodzielnie; muszą być trzymane razem.
browly

2

Wydawało się, że Dave zapewnia najbliższe programowalne rozwiązanie tego, czego zażądał OP. Doszedłem do wniosku, że można to zrobić również ręcznie , jeśli przyjmiemy następujące założenia (nie jest to czysty problem techniczny - jest to raczej problem organizacyjny niż techniczny):

  1. Ponieważ OP wymaga, aby każdy plik zip mógł wyodrębnić całą zawartość niezależnie , pliki, które przekraczają 20 MB po skompresowaniu, muszą być obsługiwane w jeden z następujących sposobów:
    • nie należy ich rozpatrywać i dlatego należy je rozdzielić;
    • należy je podzielić na 20 MB woluminów, jak sugerują inne odpowiedzi ( winzip , 7-zip ), a wynikowych plików nie można używać niezależnie (zerwanie z pierwszym założeniem).
  2. Pliki spakowane niekoniecznie muszą mieć dokładnie 20 MB.
  3. Jeśli ważniejsze jest posiadanie kilku plików zip o przybliżonym rozmiarze 20 MB, wówczas kompresowanie można wykonać bez kompresji.

Używając tej metody z 7-zip (interfejs Windows i terminal) zachowałem kompresję w nowo wygenerowanych plikach zip.

Zacznij od skompresowania wszystkich plików do jednego pliku zip w pustym folderze (z żądaną metodą kompresji), np. ALL.zipI otwórz go:

  1. Uporządkuj listę plików i folderów, klikając kolumnę rozmiar lub rozmiar spakowany (skompresowany);
  2. Zacznij od najmniejszych rozmiarów i wybierz pliki / foldery, które chcesz zgrupować w zip;
  3. Naciśnij Testprzycisk, aby potwierdzić ich zbiorowy rozmiar (dotyczy to ich kompresji): Funkcja testowa
  4. Naciśnij przycisk Extractlub Copypodczas dodawania na końcu ścieżki rozpakowywania nazwy nowego folderu (np . plu_8MB:)
  5. Wewnątrz ALL.zipzip usuń właśnie wyodrębnione pliki (unikając pomyłek w ponownym wyodrębnieniu) i przejdź do następnego folderu lub podzestawu plików;
  6. Powtórz jedną z następujących czynności:
    • kroki od 1 do 5, jeśli planujesz utworzyć niezależny plik zip;
    • kroki od 1 do 3 i ponownie użyj tej samej nazwy folderu (krok 4), dopóki ich zbiorcze rozmiary nie będą w przybliżeniu 20 MB;
  7. Po rozpakowaniu całej zawartości ALL.zipdo niezależnych folderów usuń ten zip i otwórz terminal w tym folderze ;
  8. Rodzaj:

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

    Naciśnij, ENTERa to wygeneruje plik zip dla każdego właśnie wyodrębnionego folderu.


Dla różnych parametrów podczas ponownej kompresji, oto dokumentacja składni 7zip .
CPHPython
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.