Gzip
如何獲取 gzip 存檔的尾隨數據?
我有一個帶有尾隨數據的 gzip 存檔。如果我使用
gzip -d
它解壓它,它會告訴我:“解壓OK,忽略尾隨垃圾”(同樣gzip -t
可以用作檢測是否存在此類數據的方法)。現在我想了解這個垃圾,但奇怪的是我找不到任何方法來提取它。
gzip -l --verbose
告訴我存檔的“壓縮”大小是文件的大小(即帶有尾隨數據),這是錯誤的並且沒有幫助。file
也無濟於事,那我該怎麼辦?
現在想通瞭如何獲取尾隨數據。
我創建了 Perl 腳本,它創建了一個帶有尾隨數據的文件,它很大程度上基於https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=604617#10:
#!/usr/bin/perl use strict; use warnings; use IO::Uncompress::Gunzip qw(:all); use IO::File; unshift(@ARGV, '-') unless -t STDIN; my $input_file_name = shift; my $output_file_name = shift; if (! defined $input_file_name) { die <<END; Usage: $0 ( GZIP_FILE | - ) [OUTPUT_FILE] ... | $0 [OUTPUT_FILE] Extracts the trailing data of a gzip archive. Outputs to stdout if no OUTPUT_FILE is given. - as input file file causes it to read from stdin. Examples: $0 archive.tgz trailing.bin cat archive.tgz | $0 END } my $in = new IO::File "<$input_file_name" or die "Couldn't open gzip file.\n"; gunzip $in => "/dev/null", TrailingData => my $trailing; undef $in; if (! defined $output_file_name) { print $trailing; } else { open(my $fh, ">", $output_file_name) or die "Couldn't open output file.\n"; print $fh $trailing; close $fh; print "Output file written.\n"; }