假设我下载了一个 zip 存档,我的意思是像在数据流中动态添加一些文件,避免使用临时文件:
wget http://example.com/archive.zip -O - | zipadder -f myfile.txt | pv
我在某处读到 bsdtar 可以操纵这样的流。
这在 RAM 上可能很难,因为它需要您完全在内存中操作 zip 结构。也就是说,应该可以zipadder
用 python 编写,StringIO
用于操作从 stdin 读取的内存支持的类似文件的对象,如下所示:
#!/usr/bin/env python
import zipfile
import sys
import StringIO
s = StringIO.StringIO(sys.stdin.read()) # read buffer from stdin
f = zipfile.ZipFile(s, 'a')
f.write('myfile.txt') # add file to buffer
f.close()
print s.getvalue() # write buffer to stdout