{"id":21620770,"url":"https://github.com/miku/unzippa","last_synced_at":"2025-08-01T16:06:59.412Z","repository":{"id":57507381,"uuid":"128740847","full_name":"miku/unzippa","owner":"miku","description":"Unzip selected members from a zipfile 150x faster than unzip.","archived":false,"fork":false,"pushed_at":"2025-03-13T13:50:53.000Z","size":4356,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-20T05:50:50.572Z","etag":null,"topics":["performance","unzip"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miku.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-04-09T08:39:41.000Z","updated_at":"2024-08-14T23:00:15.000Z","dependencies_parsed_at":"2025-05-07T00:46:57.575Z","dependency_job_id":"f72e5323-3224-4966-b123-37175853514f","html_url":"https://github.com/miku/unzippa","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/miku/unzippa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miku%2Funzippa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miku%2Funzippa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miku%2Funzippa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miku%2Funzippa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miku","download_url":"https://codeload.github.com/miku/unzippa/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miku%2Funzippa/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268256906,"owners_count":24221052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["performance","unzip"],"created_at":"2024-11-24T23:12:45.584Z","updated_at":"2025-08-01T16:06:59.384Z","avatar_url":"https://github.com/miku.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# unzippa\nA faster version of a special [unzip](https://linux.die.net/man/1/unzip) use case.\n\n![](flow.png)\n\nUsage\n-----\n\nWhere with vanilla [unzip](https://linux.die.net/man/1/unzip) you would write:\n\n```shell\n$ unzip -p \u003carchive\u003e \u003cmember\u003e \u003cmember\u003e \u003cmember\u003e ...\n```\n\nYou might hit the an error saying: *Argument list too long* - and maybe you do\nnot want to mess with\n[ARG_MAX](https://www.in-ulm.de/~mascheck/various/argmax/)?\n\nUnfortunately, `unzip` does not allow a file with members passed as list of\narchive members:\n\n\u003e An **optional list of archive members to be processed, separated by spaces**.\n(VMS versions compiled with VMSCLI defined must delimit files with commas\ninstead. See -v in OPTIONS below.) **Regular expressions (wildcards) may be\nused** to match multiple members; see above. Again, be sure to quote expressions\nthat would otherwise be expanded or modified by the operating system.\n\nThis is the gap, that `unzippa` fills:\n\n```shell\n$ unzippa -m \u003cmembers-file\u003e \u003carchive\u003e\n```\n\nThis attempts to extract all members given in *members-file*, one per line, to\nstdout. This will work with hundreds or thousands of members. By default,\nstdout is used, optionally an output file can be set via -o flag.\n\nPerformance\n-----------\n\nA fake file: Zipfile with 100000 files, and 10000 entries to extract. In this\nvery special case, unzippa seems about 150x faster than plain unzip.\n\n```shell\n$ unzip -l fixtures/fake.zip | sed '1,3d;$d' | sed '$d' | wc -l\n100000\n\n$ time unzip -p fixtures/fake.zip $(cat fixtures/fake.txt | tr '\\n' ' ')\nreal    0m20.564s\nuser    0m19.978s\nsys     0m0.146s\n\n$ time unzippa -m fixtures/fake.txt fixtures/fake.zip\n\nreal    0m0.138s\nuser    0m0.136s\nsys     0m0.038s\n```\n\nThe unzippall\n-------------\n\nAn executable `unzippall` is included in package since 0.1.4.\n\nThe unzippall tool takes a list of filenames (e.g. from stdin) and extracts them to stdout in\nparallel. Super fast, order is not preserved.\n\nUsage:\n\n```\n$ find /tmp/updates -type f -name \"*zip\" | unzippall -i '.*xml' \u003e data.file\n```\n\nPerformance: Finding 45000 files with `find`, about 2s. Finding files and\nrunning `unzip -p` on each of them: 13min. Using `unzippall` on the same\nfileset: about 2min.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiku%2Funzippa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiku%2Funzippa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiku%2Funzippa/lists"}