How do I unzip multiple / many files under Linux?

by Vivek Gite on March 4, 2007 · 13 comments

Q. I’ve lots of files in a directory called /disk2/images. All files are zip file format , so I am using following command:

unzip *.zip

Which is result into an error as follows:

caution: filename not matched

How do I unzip multiple / many files under Linux?

A. Linux or UNIX unzip command will list, test, or extract files from a ZIP archive, commonly found on MS-DOS systems.

When you want to unzip file using wild card, you have two options as follows.

Option # 1 : unzip multiple files using single quote (short version)

Type the command as follows:
$ unzip ‘*.zip’

Note that *.zip word is put in between two single quote, so that shell will not recognize it as a wild card character.

Option # 2 : unzip multiple files using shell for loop (long version)

You can also use for loop as follows:
$ for z in *.zip; do unzip $z; done

See also

Featured Articles:

Share this with other sys admins!
Facebook it - Tweet it - Print it -

{ 13 comments… read them below or add one }

1 Kamchybek Jusupov March 6, 2007

# If files are password protected, and we are not sure which password

for Z_FILE in *.zip; do
for PASSWD in [ pass123, PASS123, abc123, ABC123 ]; do
unzip -P $PASSWD $Z_FILE;
if [ $? = 0 ]; then # successful unzip
break
fi
done
done

Reply

2 nixcraft March 6, 2007

Kamchybek,

This is an excellent hack.

Appreciate your post.

Reply

3 Kamchybek Jusupov March 21, 2007

> Appreciate your post.

No probs, copyleft (c) :)

Actually I’ve seen yours:

$ for z in *.zip; do unzip $z; done

But, it was not enough for me, ’cause we have password protected ones… So, can say that idea comes from you :) I just added a new feature (validation)…

I think it should/can be improved further to check for other exit status codes…

Maybe later some day…

Reply

4 Bobby Cox April 8, 2007

I used to use for i in *.zip ; do unzip $i ; done as well but then I found out about the following command and use it all the time now.

unzip \*.zip

escape the asterik and you are good to go. :)

Reply

5 Naresh July 26, 2007

Hi

I tried unzip -P $PASSWD $Z_FILE; command but it is not working and for same zip file it is working in US with same password. I read in one of the web sites that, non USA system needs to install a patch for running above command. If yes Please let me know where can I get this patch else please let me know how to run this command.

Thanks
Naresh

Reply

6 Oberg January 24, 2009

Thanks, just what I needed! Very straitghtforward. +1 virtual cookie for you.

Reply

7 some dude April 25, 2009

If you have spaces in your filenames, you can also use the following:

for z in *.zip; do unzip “$z”; done

Reply

8 Ragu May 11, 2009

find -name \*.zip -exec unzip {} \;

find -name \*.zip | xargs -t -i unzip {}

Reply

9 moshe beeri May 31, 2009

If you like to extract multiple tar or tar.gz use the following command
for f in *.tar.gz; do tar zxf $f; done

Reply

10 Kaithy Aravind Reddy December 27, 2009

Thanks all for sharing, very useful information about Unzip.

Reply

11 eladio matos February 18, 2010

Question: and if I want do delete a file in a batch of different compressed archives? Lets say all copies of “info.txt” or “logo.jpg” in a.zip, b.zip, c.zip(…) z.zip, etc. There is a way to do it?

Reply

12 vipin kumar January 12, 2012

excellent post …. short method is really awesome..

Reply

13 Jane January 16, 2012

Exactly what I was looking for! THANK YOU!

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <blockquote> <pre> <a href="" title="">
What is 3 + 10 ?
Please leave these two fields as-is:
Solve the simple math so we know that you are a human and not a bot.



Previous post:

Next post: