Utworzyłem dwa pliki ZIP tego samego katalogu. Jeden z GUI, drugi z:
$ zip -r alpha_cmd.zip Alpha
Katalog Alpha ma 33,640 MB i zawiera 164 elementy.
Plik ZIP utworzony przez GUI jest o 2100 bajtów większy niż plik ZIP utworzony w wierszu poleceń.
Dlaczego plik ZIP jest tworzony za pomocą GUI?
Uwaga : Mimo że pliki ZIP mają różne rozmiary, po rozpakowaniu katalog każdego z nich ma dokładnie taką samą liczbę bajtów. Zasadniczo jestem bardzo ostrożny wobec możliwych niespójności wprowadzanych przez zarządzanie moim systemem plików za pomocą GUI i poleceń powłoki.
ditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
Odpowiedzi:
Zipowanie z Findera dodaje folder __MACOSX, niewidoczny na komputerach Mac, zawierający widelce zasobów OS X, takie jak ikony niestandardowe i tym podobne. Z Wikipedii :
źródło
Nawet oprócz głównej przyczyny w tym przypadku (Finder dodaje dodatkowe ukryte rzeczy, jak mówi empedocle), różne rozmiary ZIP-ów tych samych danych nie wskazują na problem, gdy różnica wielkości wynosi ułamek procenta.
Różne implementacje ZIP mogą mieć inny domyślny poziom kompresji (zapisany czas pracy procesora i rozmiar) lub po prostu mieć inny kod, który zapisuje więcej lub mniej dopasowań, oszczędzając więcej lub mniej bajtów na domyślnym poziomie kompresji.
Na przykład 7-Zip zwykle tworzy mniejsze
.zip
pliki niż inne programy ZIP. (I nie, nie mówię o własnym.7z
formacie pliku. Ma też lepszy kompresor ZIP).zipcmp to program cmdline, który może porównywać pliki ZIP. Domyślnie porównuje tylko katalog ZIP, aby sprawdzić, czy wszystkie pliki mają tę samą nazwę, rozmiar i CRC . W takim przypadku oba pliki ZIP prawie na pewno mają tę samą zawartość, ale po prostu skompresowane inaczej (jeśli rozmiar skompresowanego różni się.) Oczywiście, dopóki pliki ZIP nie zostaną uszkodzone. Służy
unzip -t foo.zip
do testowania pliku ZIP pod kątem błędów dekompresyjnych, niezgodnych CRC itp.źródło
/usr/bin/zip
go inną wersją jestln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip
. W ten sposób zawsze masz/usr/bin/zip
, ponieważ atomowo zastępujesz implementację systemu. Ponadto stara wersja została po prostu przemianowana, a nie przeniesiona do/tmp
(który może być na innym systemie plików). Aby ją wyłączyć, po prostu zmień jej nazwęzip.disab
, zobacz, czy Finder się zepsuje, a następnie zmień nazwę z powrotem. Ale funkcje biblioteki do tworzenia zip są powszechne. Finder prawie na pewno nie rozwidla / exec/usr/bin/zip
.