无需解压缩即可访问压缩文件

时间:2019-05-24 15:09:06

标签: bash unzip

我有一个包含tar.gz文件的zip文件。我想访问tar.gz文件的内容,但不将其解压缩

我可以在zip文件中列出文件,但是当然,当尝试解压缩这些文件之一时,bash说:“无法打开:没有这样的文件或目录”,因为该文件不存在

for file in $archiveFiles;
        #do echo ${file: -4};
        do
          if [[ $file == README.* ]]; then
            echo "skipping readme, not relevant"
          elif [[ $file == *.tar.gz ]]; then
            echo "this is a tar.gz, must extract"
            tarArchiveFiles=`tar -tzf $file`
            for tarArchiveFile in $tarArchiveFiles;
                do echo $tarArchiveFile
                done;

          fi
    done;

有可能在不进行临时存储的情况下“即时”提取它。我的印象是,这在python中是可行的

2 个答案:

答案 0 :(得分:2)

不解压缩(显然)是无法做到的,但是我认为您的意思是不解压缩到文件系统。

unzip具有-c-p选项,它们都解压缩到标准输出。 -c输出文件名。 -p只是将二进制解压缩的文件数据转储到stdout。

所以:

unzip -p zipfile.zip path/within/zip.tar.gz | tar zxf - 

或者如果您要列出tarfile的内容:

unzip -p zipfile.zip path/within/zip.tar.gz | tar ztf - 

如果您不知道zipfile中tarfile的路径,则需要编写一些更复杂的东西,以消耗unzip -c的输出,并识别输出中的文件名行。在这种情况下,最好使用“适当的”语言编写内容。 Python具有非常灵活的ZipFile库函数,大多数主流语言也具有类似的功能。

答案 1 :(得分:1)

您可以使用-p选项将zip文件的单个成员通过管道发送到stdout

在您的代码更改中

tarArchiveFiles=`tar -tzf $file`

tarArchiveFiles=`unzip -p zipfile $file | tar -tzf -`

用您从$archiveFiles来源的zip存档的名称替换“ zipfile”