テスト用に任意のサイズの tarfile を作成する必要がありますが、ディスクにヒットさせたくありません。
これを行う最も簡単な方法は何ですか?
Python を使用して、そのような tarfile を簡単に生成できます。
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()
michael@challenger:~$ ./mktar.py | tar tvf -
-rw-r--r-- 0/0 16777216 2012-08-02 13:39 fizzbuzz.data
tar -O
このように -O オプションで tar を使用できますtar -xOzf foo.tgz bigfile | process
https://www.gnu.org/software/tar/manual/html_node/Writing-to-Standard-Output.html
PS: ただし、tar は圧縮ファイル全体を読み取ってから stdout への書き込みを開始するため、意図した利点が得られない可能性があります。大きなファイルの抽出を開始し、時間の経過に伴うファイル サイズを追跡することで、この動作を実証できます。ほとんどの処理時間はゼロであり、非常に遅い段階で成長を開始する必要があります。一方で、私はこれを広範囲に調査していません。回避策があるかもしれません。または、最初の手のメモリ不足の経験が間違っているだけかもしれません。