2012-08-02 33 views

回答

5

您可以轻松地使用Python来产生这样的tar文件:

mktar.py

#!/usr/bin/python 

import datetime 
import sys 
import tarfile 

tar = tarfile.open(fileobj=sys.stdout, mode="w|") 

info = tarfile.TarInfo(name="fizzbuzz.data") 
info.mode = 0644 
info.size = 1048576 * 16 
info.mtime = int(datetime.datetime.now().strftime('%s')) 

rand = open('/dev/urandom', 'r') 

tar.addfile(info,rand) 
tar.close() 

[email protected]:~$ ./mktar.py | tar tvf - 
-rw-r--r-- 0/0  16777216 2012-08-02 13:39 fizzbuzz.data 
+0

注意:这将耗尽您的系统在Linux上的熵。不一定是问题,但需要注意的一点。 – 2012-08-02 17:50:03

+0

不使用urandom。我只是测试了它,而我的entropy_avail实际上是从129到184. – MikeyB 2012-08-02 18:08:44

+0

使用urandom从池中抽取一些熵,尽管它不像熵随机那样依赖于熵池;更可能的是它触发了低水印,系统在检查之前生成了更多的熵。这也可能是你的系统有一个HRNG。 – 2012-08-02 18:17:19

0

您可以使用焦油-O选项tar -O,这样tar -xOzf foo.tgz bigfile | process

https://www.gnu.org/software/tar/manual/html_node/Writing-to-Standard-Output.html

PS:但是,它可能是,你不会得到你打算获得的好处,因为tar只有在读完整个压缩文件后才开始写stdout。您可以通过开始大文件提取和随着时间的文件大小来演示此行为;大部分处理时间应该为零,并且在非常晚的阶段开始生长。另一方面,我还没有广泛研究过这个问题,可能会有一些解决办法,或者我可能会对我的第一手内存不足的体验感到失望。