import sys, struct, os, shutil file = open(sys.argv[1]) try: destdir = sys.argv[2] except IndexError: destdir ="." headerst = "100s8s8s8s12s12s8s1s100s" def fc(s,d,l): while l > 0: d.write(s.read(min(l,512))) l -= min(l,512) header = True while header: header = file.read(512) st = lambda s: s.strip("\x00 ") name, mode, uid, gid, size, modtime, checksum, link, linked = map(st, struct.unpack(headerst, header[:257])) size = int(size, 8) name = os.path.join(destdir,name) print ">> Extracting:", name, " size:",size d,n = os.path.split(name) if not os.path.isdir(d): os.makedirs(d) if link == "0": nfile = open(name, "w") fc(file, nfile, size) nfile.close() elif link == "5": if not os.path.isdir(name): os.makedirs(name) else: print "fuunyformat:", link file.read(size) file.seek((512 - (file.tell() % 512)) % 512,1)