Po skompresowaniu pliku istnieje sposób szybkiego zapytania go o rozmiar nieskompresowanego pliku (bez jego dekompresji), szczególnie w przypadkach, gdy rozmiar nieskompresowanego pliku jest większy niż 4 GB.
Zgodnie z RFC https://tools.ietf.org/html/rfc1952#page-5 możesz zapytać o ostatnie 4 bajty pliku, ale jeśli nieskompresowany plik miał> 4 GB, wówczas wartość reprezentuje tylkouncompressed value modulo 2^32
Tę wartość można również odzyskać, uruchamiając gunzip -l foo.gz
, jednak kolumna „nieskompresowana” po prostu zawiera uncompressed value modulo 2^32
ponownie, prawdopodobnie podczas odczytu stopki, jak opisano powyżej.
Zastanawiałem się tylko, czy istnieje sposób na uzyskanie rozmiaru nieskompresowanego pliku bez konieczności jego pierwszej dekompresji, byłoby to szczególnie przydatne w przypadku, gdy pliki spakowane gzip zawierają ponad 50 GB danych i rozpakowanie ich przy użyciu metod takich jak gzcat foo.gz | wc -c
EDYCJA: Ograniczenie 4 GB jest otwarcie potwierdzone na man
stronie gzip
narzędzia dołączonego do OSX ( Apple gzip 242
)
BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
integer, therefore, it can not represent files larger than 4GB. This
limitation also applies to -l option of gzip utility.
gzip
wyszedł w 1992 roku. Byłbym zaskoczony, gdyby w okolicy kręciło się wielu 23-latków. Jestem pewien, że są takie, ale z tego, co mogę powiedzieć, mediana wieku to około 30-35 lat.
xz
które nie mają tego ograniczenia. GNU przechodzi na xz
.
xz
że „rozwiązałoby” ten problem.
gzip
musi być starsze niż wielu użytkowników w tej społeczności!