Answers:
现在想出了如何获取尾随数据。
我创建了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";
}
while (<>)
循环perl
将读取stdin和@ARGV中列出的任何文件....,这使得编写与过滤器(例如,读取stdin,写入stdout)和命名文件一样工作的脚本变得容易)。当然,stdout始终可以重定向到文件。我的大多数perl脚本都是作为过滤器编写的,以利用此优势。
push @ARGV,'-' if (!@ARGV);
之前my $input_file_name = shift;
,这里需要的就是所有这些。即默认arg -
(如果$ ARGV [0] =='-h'或'--help',则可以打印帮助消息。)。对于while(<>)
循环,您甚至不需要执行此操作,但可能比给这样编写它要麻烦得多IO::Uncompress::Gunzip
。
-o
选项之类的东西。让脚本自动地从输入的两个arg切换到输入的arg,然后仅输出arg似乎对我来说是冒险和容易发生的(诱人的墨菲)。
less
或hd
或hd | less
或什么的。