| #!/usr/bin/env python3 |
| |
| import tarfile |
| import zipfile |
| import sys |
| import io |
| from pathlib import Path |
| |
| def merge_zips_to_tgz(tgz_filename, zip_filenames): |
| with open(tgz_filename, 'wb') as outfile: |
| with tarfile.open(fileobj=outfile, mode='w:gz') as tgz: |
| for zip_filename in zip_filenames: |
| with zipfile.ZipFile(zip_filename, 'r') as zip_file: |
| for zip_info in zip_file.infolist(): |
| with zip_file.open(zip_info) as zip_member: |
| buffer = io.BytesIO(zip_member.read()) |
| tar_info = tarfile.TarInfo(name=zip_info.filename) |
| tar_info.size = len(buffer.getbuffer()) |
| tgz.addfile(tarinfo=tar_info, fileobj=buffer) |
| |
| |
| if __name__ == "__main__": |
| if len(sys.argv) < 2: |
| print(f"Usage: {Path(__file__).name} output.tgz zip1.zip zip2.zip ...") |
| sys.exit(1) |
| |
| tgz_filename = sys.argv[1] |
| zip_filenames = sys.argv[2:] |
| merge_zips_to_tgz(tgz_filename, zip_filenames) |
| |