Jak zrobić „Pliki do przechowywania bez kompresji” w 7-zipie?

25

Czy jest jakiś sposób, aby selektywnie zapobiec kompresji niektórych typów plików w 7-zip, na przykład w WinRAR?

Próbuję skompresować ogromny folder (wiele gigabajtów) i nie chcę, aby już skompresowane pliki (np. Pliki ZIP) zostały ponownie skompresowane - powinny być przechowywane bez kompresji.

Mehrdad
źródło
Czy istnieje jakiś konkretny powód (oszczędność każdego możliwego czasu przetwarzania, czytanie go bez konieczności dołączania pliku binarnego 7z lub ponownego wdrażania LZMA itp.), Że chcesz to zrobić? Ogólnie rzecz biorąc, większość narzędzi do kompresji, na które natrafiłem, bywa wystarczająco inteligentna, aby automatycznie przechowywać rzeczy nieskompresowane, jeśli stwierdzą, że plik źle reaguje na próbę dalszego kompresowania.
ssokolow
@ssokolow: Minęły 4 lata i chyba nigdy nie odpowiedziałem na twoje pytanie, ale mogą istnieć inne powody, takie jak minimalizacja szkód spowodowanych przez korupcję, a także ułatwienie odzyskiwania danych po katastrofie.
Mehrdad,
Połączone pytanie: unix.stackexchange.com/questions/241898/...
bohdan_trotsenko

Odpowiedzi:

19

Tak, możliwe są różne metody kompresji dla różnych plików w tym samym archiwum 7-Zip.

Użyj wersji 7-Zip w wierszu polecenia z -mparametrem, aby określić metodę as Copy, co oznacza brak kompresji.

Przykład:

7za a -m0=Copy tmp7.7z *.txt

Aby uzyskać więcej informacji, zobacz przełącznik -m (Ustaw metodę kompresji) .

harrymc
źródło
Powyższe polecenie nie kompresuje plików txt i dodaje tylko pliki txt do istniejącego archiwum. Przed uruchomieniem powyższego polecenia należy utworzyć plik archiwum z plikami innymi niż txt. Nie jest to takie proste, jeśli istnieje n różnych typów plików.
Praveen Sripati,
Jeśli -m0=Copynie działa, spróbuj -mx=0.
Bora M. Alper
15

Załóżmy, że masz pliki zip i nieskompresowane pliki txt w folderze.

Pierwszym krokiem jest utworzenie archiwum kompresującego pliki txt za pomocą następującego polecenia.

możesz użyć -m do ustawienia poziomów kompresji, zależy to również od używanej metody kompresji

Załóżmy tutaj, że jest to tylko domyślna kompresja

7z a compressed.7z *.txt -r 

Zostaniesz skompresowany. 7z teraz.

Drugim krokiem będzie skopiowanie już skompresowany plik do tego archiwum lub utworzyć nowe archiwum

7z u compressed.7z -u!update.7z -mx0 *.zip 

Istnieje ponadto opracowanie komendy UPDATE tutaj

A jeśli masz swobodę korzystania z interfejsu graficznego, aktualizację można wykonać w następujący sposób

wprowadź opis zdjęcia tutaj

Manish Singh
źródło
Trochę kłopotu, ale myślę, że to zadziała, dzięki.
Mehrdad
1

Stworzyłem skrypt PowerShell, który szybko skompresuje katalog, przechowując typy plików, które są już skompresowane (np. Pliki .zip) bez próby ich ponownego skompresowania. Wykorzystuje interfejs wiersza poleceń 7zip i korzysta z rozszerzeń nazw plików, aby zdecydować, czy skompresować, czy po prostu zapisać dany plik.

Skrypt można znaleźć tutaj: https://gist.github.com/ivanatpr/5dea086172eab573ba71

ivanatpr
źródło
0

Technicznie skompresowane pliki nie kompresują się dalej, coś o limicie entropii lub coś takiego, zapominam o szczegółach, ale najwięcej, co kiedykolwiek dostałeś, to mniej niż 2%, które widziałem.

Większość dobrych kompresorów sprawdza kompresję i po prostu przechowuje nieskompresowane pliki, ponieważ kompresowanie spowodowałoby narzut i zwiększenie rozmiaru.

Oczywiście jest przede wszystkim praca i czas na przeglądanie pliku.

Jak omówiono w innych odpowiedziach, wykonywanie wielu przejść przez zestaw plików prawdopodobnie będzie najlepszym rozwiązaniem i będzie łatwe do skryptu.

Utwórz archiwum 7z i dodaj wszystko, ALE skompresowane pliki w jednym przebiegu, a następnie dołącz pliki wstępnie skompresowane jako dane nieskompresowane. (Zrobiłbym to w ten sposób, ponieważ rzeczy ściśliwe byłyby wtedy na początku archiwum, a nieściśliwe na końcu. Szybciej odpływałby z dysku, ponieważ jest ciągły)

(użyłem zbyt dużo „kompresji ...”!)

lornix
źródło
1
Na wypadek, gdyby komukolwiek to pomogło, oto sedno „czegoś o limicie entropii lub takim”. Entropię można traktować jako miarę nieprzewidywalności. Ideą kompresji jest to, że jeśli potrafisz przewidzieć wzór bitów, nie musisz przechowywać całej rzeczy ... tylko bardziej zwięzłe instrukcje, jak to przewidzieć (słowo kodowe). Teoretyczną maksymalną entropię osiąga się, gdy równie prawdopodobne jest, że następnym słowem kodowym może być cokolwiek. Wyciskanie większej kompresji ze skompresowanych danych ma miejsce, gdy drugi przebieg identyfikuje pozostałą przewidywalność na wyjściu pierwszego.
ssokolow