130

How do I make a .zip file that contains every file AND every folder in the directory?

1

4 Answers 4

190
zip -r foo.zip dir_path
6
  • 1
    The -r means recursive and tells it to go through all of the sub folders. You don't really need the .zip on the filename (foo.zip) as it will create this anyway.
    – HippoDuck
    Commented Jul 21, 2016 at 7:50
  • @user2924019's comment that you dont need to specify the zip name is not true in CentOS7.
    – killjoy
    Commented Jan 21, 2018 at 16:14
  • CentOS7 is exactly where I tested this.
    – HippoDuck
    Commented Jan 23, 2018 at 15:51
  • 5
    Well, we've come to what is known as a Mexican standoff, now haven't we? Commented Mar 2, 2018 at 21:51
  • 2
    I'm on CentOS-7 (7.5 to be exact). I ran zip -r foo my_folder and ended up with a foo.zip. Hopefully this standoff can finally come to an end. Commented Jun 24, 2020 at 2:08
27

Try:

zip -r filename.zip /path/to/folder

Note - this will go recursively, i.e. it will zip all folders and all subfolders of the given folder.

1
  • where obviously /path/to/folder can be a regex, like /path/to/folder/myprefix*, which will put in the archive only the files and folders starting by myprefix.
    – Tms91
    Commented Jun 29, 2023 at 15:48
7

Use the -r option. From zip(1):

-r

Travel the directory structure recursively; for example:

zip -r foo foo

The name of the zip file comes first. "Recursively" means that the zip file will include subfolders of the given folder, the subfolders of those folders, and so on.

2
  • Where the .zip file goes after zipping? Commented Jul 27, 2017 at 17:56
  • To the path specified. foo in this example. Commented Jan 3, 2020 at 11:56
5

If you are bound to a zip, I'd use:

zip -r zipfilename directoryPath

The -r is the key, but you can find all the options here.

You must log in to answer this question.