我正在寻找一种创建压缩文件的技术组合。 后来我想在运行中解压缩该文件并通过管道传递给curl命令。
问题是我正在使用的代码生成一个保存压缩数据流的文件(而不是文件):
my $fh = IO::Zlib->new("file.gz", "wb9");
if (defined $fh) {
print $fh "some big data here!\n";
$fh->close;
}
因此我不能简单地使用zcat解压缩它:
zcat file.gz
zcat: can't stat: file.gz (file.gz.Z): No such file or directory
并且这样做的全部原因是我希望稍后将zcat输出重定向为STDIN for curl命令:
zcat file.gz | curl -X PUT -d @- http://localhost:5822/
如果我创建文本文件并对其进行gzip,则上述工作正常。我正在寻找一种优雅的方式从Perl中完成它,在那里我不需要创建临时文件,压缩它,首先删除临时文件。
这可能有两种方式实现:
1)找到一种方法来创建包含文件数据的压缩文件(而不是数据流)
2)找到一个Linux / Unix / OSX命令来处理带有流压缩数据的文件(比如zcat显然不能)
非常感谢帮助。两种方式
答案 0 :(得分:2)
您的Perl代码适用于我的测试,并添加了必要的使用行:
use IO::Zlib;
您说您的代码会生成一个包含压缩数据流的文件(而不是文件)。这没有任何意义。文件是文件。它是包含字节序列的文件系统中的对象。您的代码生成一个普通文件,其内容是Zlib的压缩输出。
我认为您的问题是代码由于某种原因(缺少权限?)而无法生成文件,或者您只是在寻找文件的错误位置。
添加一些调试以查看文件是否成功打开。用
替换“新”行my $fh = new IO::Zlib;
$fh->open("/full/path/to/filename", "wb9") or die("couldn't open file for writing: $!");
使用带文件名的完整路径,以便确定文件的生成位置。 (通常它会在当前目录中创建,但不清楚没有上下文的位置)