我有一个包含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中是可行的
答案 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”