回答:
末尾のデータを取得する方法を考え出した。
末尾のデータを含むファイルを作成する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
、それが簡単に書き込みスクリプトへの作業も同様にだけでなく、フィルタこと(つまり標準入力、標準出力への書き込みを読んで)と名付けられたファイル(複数可となります@ARGVに記載されている標準入力読み込み、任意のファイル(複数可)します.... )。もちろん、標準出力は常にファイルにリダイレクトできます。私のperlスクリプトのほとんどは、これを利用するためのフィルターとして作成されています。
push @ARGV,'-' if (!@ARGV);
前にmy $input_file_name = shift;
ここで必要なのはそのすべてです。つまり、デフォルトの引数-
($ ARGV [0] == '-h'または '--help'の場合、ヘルプメッセージが出力される可能性があります。)。以下のためにwhile(<>)
ループあなたもそれを行う必要はありませんが、それはおそらくのためにそのようにそれを書くためにそれの価値よりも多くのトラブルですIO::Uncompress::Gunzip
。
-o
オプションなど。スクリプトが入力の2つの最初の引数から最初の引数に自動的に切り替わり、出力のみが自動的に切り替わるのは危険で、私には偶然になりがちです(マーフィーの試み)。
less
か、hd
またはhd | less
またはものは何でも。