def writeFileTree(files, path): """Writes a list of UnixFiles to the disk, unpacking known archive files""" files = [(path + file.path, file) for file in files] # Write files: for fn, file in files: if S_ISDIR(file.mode): mkdirs(fn) elif S_ISREG(file.mode): mkdirs(os.path.dirname(fn)) with open(fn, 'wb') as dstFile: shutil.copyfileobj(file.contents, dstFile) # Recursion: for fn, file in files: if S_ISREG(file.mode): with open(fn, 'rb') as dstFile: if archive.isArchive(dstFile): print('Unpacking %s' % fn) writeFileTree(archive.readArchive(dstFile), fn + '_unpacked') # Set mtimes: for fn, file in files: if S_ISDIR(file.mode) or S_ISREG(file.mode): setmtime(fn, file.mtime)