how to unzip a zip file inside another zip file?
Categories:
Unzipping Nested Zip Files: A Comprehensive Guide

Learn how to extract files from a zip archive that is itself contained within another zip file using command-line tools on Unix-like systems.
Dealing with nested zip files can be a common challenge, especially when working with large datasets or complex archives. This guide will walk you through the process of extracting content from a zip file that is embedded within another zip file using standard Unix command-line utilities like unzip
and dd
.
Understanding the Challenge
When you have a file structure like outer.zip
containing inner.zip
, and inner.zip
contains my_document.txt
, a direct unzip outer.zip
command will only extract inner.zip
as a file, not its contents. To access my_document.txt
, you need to first extract inner.zip
and then unzip it separately. This process can be automated and streamlined using a combination of commands.
flowchart TD A[Start] --> B{Outer Zip File: outer.zip} B --> C[Contains: inner.zip] C --> D{Inner Zip File: inner.zip} D --> E[Contains: my_document.txt] E --> F[Goal: Extract my_document.txt]
Conceptual flow of nested zip file extraction
Method 1: Sequential Extraction
The most straightforward approach involves extracting the outer zip file first, then extracting the inner zip file. This method is easy to understand and execute, especially for manually handling a few nested archives.
1. Extract the outer zip file
Use the unzip
command to extract the contents of the outer zip file. This will place the inner zip file in your current directory.
2. Extract the inner zip file
Once the inner zip file is extracted, use unzip
again on the newly extracted inner zip file to get its contents.
3. Clean up (Optional)
After successful extraction, you might want to remove the intermediate inner.zip
file if it's no longer needed.
unzip outer.zip
unzip inner.zip
rm inner.zip
Sequential extraction of nested zip files
Method 2: Direct Extraction using unzip -p
and unzip
For a more direct approach that avoids creating the intermediate inner.zip
file on disk, you can use unzip -p
to pipe the content of the inner zip file directly to another unzip
command. This is particularly useful for automation or when dealing with very large nested archives where disk space for intermediate files might be a concern.
unzip -p
command extracts files to standard output (stdout) without writing them to disk. This allows piping its output to another command.unzip -p outer.zip inner.zip | unzip -
Direct extraction of nested zip using unzip -p
Let's break down this command:
unzip -p outer.zip inner.zip
: This command extracts the file namedinner.zip
fromouter.zip
and prints its content to standard output.|
: This is the pipe operator, which takes the standard output of the first command and feeds it as standard input to the second command.unzip -
: This command tellsunzip
to read the zip file content from standard input (indicated by the hyphen-
) instead of a file on disk. It then extracts the contents of this 'virtual' zip file.
Method 3: Using dd
for More Complex Scenarios (Advanced)
In some rare cases, the inner zip file might not be a direct entry in the outer zip's directory, or you might need to extract it based on its byte offset within a larger file. While less common for typical nested zips, dd
can be used to extract a specific byte range, which can then be treated as a zip file. This method requires knowing the exact offset and size of the inner zip file, which can often be found using tools like binwalk
or hexdump
.
dd
requires precise knowledge of byte offsets and sizes. Incorrect usage can lead to data corruption or incomplete extraction.# Example: Assuming inner.zip starts at byte 12345 and is 67890 bytes long
dd if=outer.zip of=inner.zip bs=1 skip=12345 count=67890
unzip inner.zip
Extracting an embedded zip using dd
(requires offset/size)
This method is generally overkill for standard nested zip files but can be invaluable for forensic analysis or when dealing with corrupted or non-standard archives where the inner zip is merely a blob of data within a larger file.