Jakie są najlepsze opcje do użycia podczas kompresji plików przy użyciu 7 Zip?


61

Często muszę zbierać pliki dziennika i przesyłać je na centralny serwer (należący do innej firmy). Serwer centralny ma limit rozmiaru pliku, dlatego próbuję utworzyć najmniejszy możliwy plik, który nadal jest w formacie zip.

Jakiego ustawienia najlepiej użyć podczas kompresji pliku tekstowego do formatu zip, gdy potrzebuję tylko małego rozmiaru pliku?

Opcje 7zip

Zrobiłem oczywistą i wybrałem ultra kompresję i zauważyłem, że LZMA ma lepszą pracę niż deflacja, ale jest o wiele za dużo innych kombinacji opcji, aby przetestować je wszystkie.


1
Czy podzielenie zip na wiele plików jest opcją?
JaredMcAteer

3
Gdy tylko wybierzesz cokolwiek poza Deflateformatem, nie jest to już „normalny” plik .zip, ale „rozszerzony” plik zip, którego pionierem jest WinZip. Początkowo zachowali rozszerzenie jako .zip, co jest bardzo konsternacyjne (ponieważ większość normalnych narzędzi do obsługi zip-ów nie jest w stanie sobie z nimi poradzić), ale większość archiwizatorów używa teraz .zipx, aby odróżnić je od tradycyjnych plików .zip. Jeśli możesz korzystać z LZMA, przełącz się na .7z i wybierz PPMd - powinien kompresować się lepiej (i szybciej!) Dla plików tekstowych.
afrazier

1
@afrazier: "Specyfikacja formatu pliku .ZIP dokumentuje następujące metody kompresji: zapisana (bez kompresji), zmniejszona, zmniejszona (metody 1-4), wszczepiona, tokenizacja, deflacja, deflate64, bzip2, LZMA (EFS), WavPack, PPMd . ” en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith

1
@endolith: bzip2, lzma, wv i ppmd to bardzo nowe dodatki do formatu pliku. Nie jest nawet bezpiecznie zakładać, że twój odbiorca może obsłużyć deflate64, a tym bardziej cokolwiek nowszego.
afrazier

1
zdefiniuj „zwykłe narzędzia zip”. Obecnie większość „zwykłych narzędzi zip”, takich jak 7z i winrar, może wyodrębnić pliki 7z.
phuclv

Odpowiedzi:


61

Aby utworzyć najmniejszy standardowy plik ZIP, który może utworzyć 7-Zip, spróbuj:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Źródło: Jak uzyskać najlepszą standardową kompresję ZIP?

W przeciwnym razie, jeśli nie zależy Ci na standardzie ZIP, użyj następujących ustawień ultra:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Które są:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on

2
@Tek: Dlaczego? To nie jest dobre. Pytanie dotyczyło użycia „standardowego formatu ZIP”, więc odpowiedź nie powinna określać LZMA. -ms = on jest dla .7z, a nie standardowych plików zip. -md jest powiązany z BZip2, więc nie spodziewam się, że wpłynie on na ZIP (a nawet LZMA). -mfb = 64 to niezoptymalizowana wartość: -mfb = 258 tworzy mniejsze pliki zip. Ta odpowiedź nawet nie wspomina -mpass = 15, co może wpływać na pliki zip. To ładnie sformatowana odpowiedź, która jest niestety błędna na wiele sposobów.
TOOGAM

6
Użyłbym lzma2
Lance Badger

Jeśli spojrzysz na 7-zip FAQ, to stwierdza, że ​​nowsze wersje 7z mogą w niektórych okolicznościach mieć gorszą wydajność niż starsze wersje. Przeczytaj FAQ, aby uzyskać więcej szczegółów, ale w skrócie użyj „qs” w polu Parametry w GUI lub użyj -mqs w wersji wiersza poleceń, aby użyć starego sortowania według metody rozszerzenia pliku. 7-zip.org/faq.html .
drojf

13

Jeśli możesz użyć formatu .7z zamiast tylko .zip, po prostu użyłbym PPMD z następującymi opcjami i pozostawiłbym wszystko inne ustawione przez Poziom Kompresji:

  • Format archiwum: 7z
  • Metoda kompresji: PPMD
  • Poziom kompresji: Ultra

Regularnie kompresuję dzienniki serwera / tekstu (60 MB +) przy użyciu tych opcji i zwykle wychodzą one w wysokości 1-2% oryginalnego rozmiaru.


W przypadku tekstu, takiego jak pliki dziennika, ppmd jest zdecydowanie najlepszym rozwiązaniem. Jednak pytanie wspomniało, że musi pozostać w formacie zip, co może nie działać z PPMD.
Brian Minton

Właśnie wypróbowałem zip z PPMD ​​i Windows Explorer otwiera zawartość bez reklam tutaj na Windows 7
Umber Ferrule

3
Też to zauważyłem. Dobrze otwiera zawartość. Jednak gdy faktycznie próbowałem wyświetlić jeden z plików w pliku zip, nie powiodło się.
Brian Minton

2
Dlaczego najlepsza metoda kompresji PPMD ​​dla plików tekstowych?
user598527

1
LZMA2 daje lepsze wyniki dla plików tekstowych niż PPMD.
T3rm1

7

Porównuję dla db.fdb 1,2 GB (1236598784 B) na serwerze Ubuntu 14.04.03 z p7zip [64] 9.20 na VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

i uzyskaj te wyniki:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

Myślę, że druga metoda działa dobrze = (prawie) najlepszy kompres z najlepszym czasem. Ale dla najlepszego „widoku” i łatwego do zapamiętania jest pierwsza metoda - z małymi plikami i bez punktu maksymalnej kompresji. Pomiędzy metodą 2 a 3 nie dostajemy dodatkowych mniejszych 7z, ale płacimy prawie dwa razy więcej czasu na kompresję. Każdy decyduje sam.


7

Po wielu eksperymentach, zagłębieniu się w szczegółową dokumentację 7zip i przeczytaniu części kodu źródłowego 7z dotyczącego zaawansowanych parametrów LZMA2, oto lepsza metoda poniżej. Zmniejszyło niektóre 1 GB rzeczywistych plików testowych ponad 2 do 4 razy lepiej niż wcześniej akceptowane rozwiązania zamieszczone tutaj, a nawet na stronie 7z.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

Zakłada się tutaj kompresję LZMA2, ale możesz być w stanie uzyskać jeszcze lepszą wydajność w 7zip dzięki przekazywaniu zaawansowanych opcji LZMA2, takich jak -m0=LZMA2:27, lub -m0=LZMA2:d25, lub tablicy parametrów takich jak

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Wydaje się, że takie parametry nie były przestrzegane przez testowane przeze mnie wersje 7z, ale możesz chcieć dalej eksplorować lub łatać kod 7z, aby je poprawnie przeanalizować. A może powinien działać i jest po prostu zepsuty w testowanych kompilacjach.


wow, to zrobiło naprawdę dużą różnicę. W moim archiwum eksperymentowałem z wieloma innymi sugestiami, w tym innymi odpowiedziami tutaj, a najlepszy wynik, jaki uzyskałem, to 99 MB w porównaniu z 85 MB przy użyciu tych ustawień.
user9399

0

Ustaw pole „podziel na wolumin, bajty” na maksymalny dozwolony rozmiar pliku serwera (w bajtach, jak sądzę, chociaż wygląda na to, że akceptuje typowe skróty, takie jak „KB” i „MB”). Jeśli plik zip przekroczy ten rozmiar, 7-zip automatycznie podzieli go na wiele plików, takich jak integracja_usługi_logicznej.zip.001 , integracja_usługi.zip.002 itp. (Dawno temu, gdy PK Zip używał tego, aby rozciągać pliki zip na wiele plików dyskietki.) Będziesz potrzebować wszystkich plików, aby je rozpakować. Użyj tego zamiast martwić się o absolutnie najlepsze ustawienia kompresji, które mają być zastosowane dla dowolnego określonego zestawu plików, ponieważ to, co jest najlepsze dla jednego pliku, może być inne dla innego pliku i nie musisz tego robić za każdym razem, gdy potrzebujesz kopiuj dzienniki.


1
Martwię się, jak ludzie po drugiej stronie rozpakują pliki. Muszę być dla nich jak najprostszy. Czy wiesz, czy możesz rozpakować podzielone woluminy za pomocą wbudowanego zip systemu Windows lub gzip?
jjnguy

Najwyraźniej nie, wbudowana funkcja folderów zip systemu Windows nie wykonuje rozpakowywania plików zip. Szkoda, ponieważ była to standardowa funkcja tego formatu przed Windows 3. Byłbym bardzo zaskoczony, gdyby gzip nie mógł tego zrobić. WinZip zdecydowanie może.
Rob Kennedy,
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.