2015-08-13 96 views
1

下,我想下载一个.tar.gz文件(我会再解压缩....但后来这对。)下载一个压缩文件的Perl

我已经通过CPAN,猎杀#1,和Perl僧侣,和下面的这段下载文件&并将其存储在磁盘上(而不会删除它,直到你打的<>进入。)

use LWP::UserAgent; 
use File::Temp; 

# Create temporary file, and delete on script-exit 
my $tmp = File::Temp->new(TEMPLATE => 'hathiXXXX', SUFFIX=>'.tar.gz', UNLINK=>1); 

my $uri = 'http://lucas.ucs.ed.ac.uk/test/hathi_full_20150701.txt.gz'; 
my $ua = LWP::UserAgent->new(); 

# Set the mime-type for a .tar.gz file 
$ua->default_header('Accept' => 'application/x-gzip'); 

# ':content_file' => $tmp->filename is LWP magic to write to a file 
my $res = $ua->get($uri, ':content_file' => $tmp->filename); 
print $tmp->filename . "\n"; 

# Once you hit enter, the temporary file is deleted 
<>; 

使用wget我得到一个文件,我可以解压缩。 上面的脚本保存了一个文件.....我无法打开。

是大小相同,具有相同的md5sum校验,并显示具有相同的第一&最后64个字节都返回文件.....

有什么我错过了?我如何得到这个dang文件?

谢谢...

(Perl的:5.18.2; LWP :: UserAgent的:6.05;文件::温度:0.23)

+2

为什么你不能打开它?你会得到什么错误? – Sobrique

+0

tar:看起来不像tar档案 tar:跳到下一个标题 tar:由于以前的错误导致出现故障状态 – CodeGorilla

+0

好的。你传递给tar的标志是什么?听起来你需要添加一个'z'。例如。 'tar xvfz '然后它会先用gunzip。如果它是相同的md5sum,那么它是相同的内容,所以你不必担心编码。 – Sobrique

回答

1

你下载的文件是一个txt.gz文件,并且似乎包含制表符分隔的数据,而不是tar格式文件。

1

**** GGNNNNN *****

TIP - 读实际问题!

正在下载的文件具有后缀.txt.gz - 它不是tar文件。使用GUI工具打开它将会起作用,因为它们不会让愚蠢的假设无缝地选择正确的工具。

文件中txt.gz结束需要与gunzip解压,不tar