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

Access to zipped files without unzipping them

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

我可以列出 zip 文件中的文件,但当然在尝试解压缩其中一个文件时 bash 说:"Cannot open: No such file or directory" 因为该文件不存在

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;

是否可以在不临时存储的情况下提取它"on the fly"。我觉得这在 python

中是可行的

你不能不解压缩(显然),但我假设你的意思是,不解压缩到文件系统。

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

所以:

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

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

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

如果您不知道 zip 文件中 tar 文件的路径,您需要编写一些更复杂的东西来使用 unzip -c 的输出,识别输出中的文件名行。在这种情况下,最好用 "proper" 语言写一些东西。 Python有一个非常灵活的ZipFile库函数,大多数主流语言都有类似的东西。

您可以使用 -p 选项将 zip 文件的单个成员通过管道传输到标准输出

在您的代码更改中

tarArchiveFiles=`tar -tzf $file`

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

将 "zipfile" 替换为您从

中获取 $archiveFiles 的 zip 存档的名称