2187

Just downloaded a .zip file from the internet. I want to use the terminal to unzip the file. What is the correct way to do this?

8
  • 5
    Extract all files from current folder, you can use: unzip \*.zip
    – burtsevyg
    Feb 18, 2016 at 11:23
  • 3
    @burtsevyg the backslash is not necessary there. It will make shell treat \* as literal star symbol. Just use unzip *.zip to make shell expand * to all files ending in .zip Jun 2, 2017 at 21:55
  • 2
    Using * alone didn't work for me. It caused filename not matched errors. \* did the job. Dec 4, 2018 at 20:04
  • 2
    I recommend you use & learn "unar" instead of a zip specific one, unless you need specific features. "Supported file formats include Zip, Tar-GZip, Tar-BZip2, RAR, 7-zip, LhA, StuffIt and many other old and obscure formats. ".
    – masterxilo
    Dec 8, 2018 at 23:49
  • 2
    Ubuntu has multiple compress/decompress tools already installed. Run apropos zip from the console for the full list. May 6, 2019 at 16:16

9 Answers 9

2904

If the unzip command isn't already installed on your system (use which unzip to check), then run:

sudo apt-get install unzip

After installing the unzip utility, if you want to extract to a particular destination folder, you can use:

unzip file.zip -d destination_folder

If you want to extract to a directory with the same name as the zip in your current working directory, you can simply do:

unzip file.zip
10
  • 121
    If you are already in the directory you want the file unzipped, omit the 2nd and 3rd arguments, i.e. unzip /path/to/file.zip
    – Severo Raz
    May 26, 2013 at 19:13
  • 2
    I have just used this command. This is an example. Step 1 (I changed to the directory where the zip file is stored): cd /home/paf/Copy/Programming/Javascript/Json Step2 (I extract the zip file in the directory I have just mentioned): unzip file.zip -d /home/paf/Copy/Programming/Javascript/Json Nov 12, 2013 at 1:10
  • 4
    unzip may be a default program. In other words, you may not need to install it.
    – noobninja
    May 31, 2016 at 19:33
  • 3
    @Aevi Check man pages [-d exdir] An optional directory to which to extract files.
    – Kenly
    Jan 11, 2017 at 11:26
  • 14
    Make sure you extract to a directory, unlike tar archives, you may find many people include dozens of files in their root directory of their zip files, this can make a real mess!!!
    – Steve
    May 17, 2017 at 6:13
287

You can simply use unzip.

Install it:

apt-get install unzip

And use it:

cd /path/to/file
unzip file.zip
163

A more useful tool is 7z, which zips and unzips a range of compression formats, notably lzma, usually the protocol offering the highest compression rates.

This command installs 7z:

sudo apt-get install p7zip-full

This command lists the contents of the zip:

7z l zipfile.zip

This command extracts the contents of the zip:

7z x zipfile.zip
10
  • 16
    7z e does not keep the directory structure - 7z x does...
    – assylias
    Oct 23, 2013 at 12:59
  • 2
    13.10 says 7z does not exist. I think it must sudo apt-get install 7zip
    – nitishch
    Oct 26, 2013 at 19:04
  • 8
    I think the install command should be sudo apt-get install p7zip or sudo apt-get install p7zip-full You need the full version to get the 7z command. The full is also the only one who handles zip and other kinds of formats out of the two.
    – Automatico
    Oct 30, 2013 at 20:15
  • 2
    could you clarify "A more useful tool"? Are you comparing to unzip? Could you provide any examples of features that make 7z more useful, and perhaps in which contexts 7z is preferred? Sep 29, 2015 at 22:17
  • 3
    For some unzip is more useful: easy to use and its Name to remember.
    – user484419
    Jan 20, 2016 at 7:25
72

Using scripting tools: Perl and Python

Many answers here mention tools that require installation, but nobody has mentioned that two of Ubuntu's scripting languages, Perl and Python, already come with all the necessary modules that allow you to unzip a zip archive, which means you don't need to install anything else. Just use either of the two scripts presented below to do the job. They're fairly short and can even be condensed to a one-liner command if we wanted to.

Python

#!/usr/bin/env python3
import sys
from zipfile import PyZipFile
for zip_file in sys.argv[1:]:
    pzf = PyZipFile(zip_file)
    pzf.extractall()

Usage:

./pyunzip.py master.zip 

or

python3 pyunzip.py master.zip

Perl

#!/usr/bin/env perl
use Archive::Extract;
foreach my $filepath (@ARGV){
    my $archive = Archive::Extract->new( archive => $filepath );
    $archive->extract;
}

Usage:

./perlunzip master.zip

or

perl perlunzip.pl master.zip

See also

5
  • 11
    Thanks, exactly what I need. I don't have root and don't wanna install unzip manually from source. This also can be used with a bash one-liner which mostly will work (assuming no ''' inside the file name): unzip(){ python -c "from zipfile import PyZipFile; PyZipFile( '''$1''' ).extractall()"; }
    – mxmlnkn
    Feb 11, 2019 at 9:50
  • 2
    Just use ZipFile class, not PyZipFile, the latter have some specific support for compressing Python libraries Jan 21, 2020 at 11:15
  • 1
    awesome. pretty quick where you don't have unzip and then root permission to install other binaries Jun 30, 2021 at 6:13
  • 1
    This one line code using perl: perl -e "use Archive::Extract;(Archive::Extract->new(archive => 'numpy-1.22.3.zip'))->extract;" Apr 6, 2022 at 8:34
  • Aces - great reminder! python -m zipfile -e myfile.zip target-dir/
    – Glycerine
    Nov 13, 2023 at 15:37
64

You can use:

unzip file.zip -d somedir

to extract to yourpath/somedir

If you want to extract to an absolute path, use

sudo unzip file.zip -d /somedir
35

If the source and destination directories are the same, you can simply do:

unzip filename.zip
1
  • 1
    On Ubuntu 17.04, -d require for unknown reason.
    – 林果皞
    May 4, 2017 at 7:14
28

I prefer bsdtar to unzip/zip. For extracting, they are pretty similar:

bsdtar -x -f /one/two/three/four.zip -C /five
unzip /one/two/three/four.zip -d /five

However for zipping, bsdtar wins. Say you have this input:

/one/two/three/alfa/four.txt
/one/two/three/bravo/four.txt

and want this in the zip file:

alfa/four.txt
bravo/four.txt

This is easy with bsdtar:

bsdtar -a -c -f four.zip -C /one/two/three alfa bravo

zip does not have the -d option like unzip, so you have no way to achieve the above unless you cd first.

1
  • As much as I'd like to give the win to a foss tool, apparently bsdtar doesn't bode well with special characters like at least one in the word Blóðstokkinn when uncrompressing. I didn't even check when compressing. What a bummer. :/ unzip handled it without problem.
    – Vrakfall
    May 6, 2019 at 14:53
26

Here is the detailed description of options that I find useful:

Command: unzip -[option] zip-path.
               -d an optional directory to which to extract files  
               -l List archive files.
               -P password Use password to decrypt encrypted zipfile entries (if any).
               -t Test archive files with cyclic redundancy check.  
               -u Update the existing files.  
               -z archive comment
1
  • 3
    Also unzip -o for overwrite
    – Luis Lopez
    May 19, 2020 at 6:20
20

Follow these instructions: http://www.codebind.com/linux-tutorials/unzip-zip-file-using-terminal-linux-ubuntu-linux-mint-debian/

Install unzip

So First of all we need to install unzip on our system if it’s not installed. unzip command is used to extract files from a ZIP archive.

Run the following command to install unzip

sudo apt-get install unzip

unzip Syntax

$ unzip [-aCcfjLlnopqtuvy] [-d dir] zipfile

Now Follow the steps below:

UnZip File

OPTION 1 – If the Zip File is in the same directory/folder in which your terminal is and we want to extract it in the present working directory.

Use the following command to achieve the above described scenario

sudo unzip zip_file_name.zip

if the zip file is protected with some password, then use the following command :

sudo ubzip -P zip_file_name.zip

Please make sure you use -P (capital P) not -p because the are different options.

OPTION 2 – If the zip file is not present in the same directory and we want to extract/unzip the file in different directory.

Use the following command to achieve the above described scenario

sudo unzip path/filename.zip -d another_path_or_same_path

if we does not use option -d the file will be extracted to present working directory.

And if the zip file is password protected we can also use -P.

use tar Command in Linux / Unix

tar is an acronym for Tape Archive. tar command is used to Manipulates archives in Linux/Unix. System administrators uses tar command frequently to rip a bunch of files or directories into highly compressed archive which are called tarball or tar, bzip and gzip in Linux/Unix system.

tar Syntax

tar [OPTION...] [FILE]...

Or

tar required Flags

tar {-r|-t|-c|-x|-u}

tar optional Flags

tar {one of the required Flags} [ -d ][-B] [ -F ] [ -E ] [ -i ] [-h ] [ -l ] [ -m ] [ -o ] [ -p ] [ -w] [ -s ] [ -U ] [ -v ]
[-Number] [-b Blocks] [-f Archive]

Examples

Create tar Archive File by Compressing an Directory or a Single File

The terminal command below will create a .tar file called sample_dir.tar with a directory /home/codebind/sample_dir or sample_dir in present working directory.

ripon@ripon:~$  tar -cvf sample_dir.tar sample_dir
sample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ ls
sample_dir sample_dir.tar

Screenshot of the terminal showing the commands above

Here’s what those flags (-cvf) actually mean

-c, --create– create a new archive

-x, --extract, --get– extract files from an archive

-f, --file ARCHIVE– use archive file or device ARCHIVE

Create tar.gz or tgz Archive File by Compressing an Directory or a Single File

The terminal command below will create a .tar.gz file called sample_dir.tar.gz with a directory /home/codebind/sample_dir or sample_dir in present working directory.

Notice that we have added extra flag -z to the command.Here’s what the flag -z actually mean

-z, --gzip, --gunzip --ungzip– Compress the archive with gzip

ripon@ripon:~$ tar -cvzf sample_dir.tar.gz sample_dirsample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ ls
sample_dir sample_dir.tar.gz

Screenshot of the terminal showing the commands above

The command bellow will create a .tgz file. One this to notice is tar.gz and tgz both are similar.

ripon@ripon:~$ tar -cvzf sample_dir.tgz sample_dirsample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ ls
sample_dir sample_dir.tgz

Compressing Multiple Directories or Files at Once

Let’s say, For example we want to compress the sample_dir directory, the java_test directory, and the abc.py file to a tar file called sample_dir.tar.gz.

Run the following command to achieve the goal above.

ripon@ripon:~$ tar -cvzf sample_dir.tar.gz sample_dir java_test abc.py
sample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
java_test/
java_test/HelloCV.java
abc.py
ripon@ripon:~$ ls
sample_dir java_test abc.py sample_dir.tar.gz

Screenshot of the terminal showing the commands above

Create .bzip2 Archive File by Compressing an Directory or a Single File

ripon@ripon:~$ tar -cjvf sample_dir.tar.bz2 sample_dir
sample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ 

Notice that we have added extra flag -f to the command.Here’s what the flag -f actually mean

-f, --file ARCHIVE– use archive file or device ARCHIVE

Screenshot of the terminal showing the commands above

Extract .tar Archive File

We can extract or untar the compressed file using the tar command. The command below will extract the contents of sample_dir.tar to the present directory.

ripon@ripon:~$ tar -xvf sample_dir.tar
sample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ 

Screenshot of the terminal showing the commands above

The following command will extract or untar files in specified Directory i.e. /home/codebind/dir_name in this case.

ripon@ripon:~$ tar -xvf sample_dir.tar -C /home/codebind/dir_name
sample_dir/
sample_dir/main.cpp
sample_dir/sample.png
sample_dir/output
ripon@ripon:~$ 

we have added extra flag -C to the command.Here’s what the flag -C actually mean

-C, --directory DIR – change to directory DIR

enter image description here

1
  • 2
    Also, to check if zip/unzip are installed, use zip -v and unzip -v. If installed it will return something like UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP. (plus several lines of additional info. If not installed, it will say something like The program 'zip' is currently not installed. You can install it by typing: apt install zip. Nov 10, 2018 at 14:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .