我的进程需要读取从流传递的文件以节省空间(LINUX)

时间:2016-04-16 05:16:09

标签: linux perl

我需要这样做:

  1. 解压缩文件.7z
  2. 读取解压缩的文件并将其传递给perl进程,而不将其写入磁盘
  3. 像这样:

    $ unpack file.7z | perl_process> out_file

    该进程需要从流中读取解压缩的文件,因为它非常大,我需要节省空间。

    目前我有(但不能这样做):

    1. unpack file.7z(生成非常大的in_file)
    2. 进程in_file out_file(进程读取in_file并生成out_file)
    3. 你能告诉我如何实现我的需求吗?

1 个答案:

答案 0 :(得分:2)

所以每个档案只包含一个文件?

7z命令行程序有一个-so选项,可以将解压缩的输出发送到STDOUT。这意味着您可以通过管道将其发送到您的perl进程:

$ 7z e archive.zip -so | perl program.pl

或者您可以使用open获取perl程序中的解压缩信息:

my $archive_file = 'archive.zip';

open my $archive_fh, '-|', "7z e $archive_file -so";

while ( <$archive_fh> ) {
    # Process text line
}

如果您还没有7zip的命令行版本,那么您应该下载p7zip described here