126

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

1

4 Answers 4

185
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
    Jul 21, 2016 at 7:50
  • @user2924019's comment that you dont need to specify the zip name is not true in CentOS7.
    – killjoy
    Jan 21, 2018 at 16:14
  • CentOS7 is exactly where I tested this.
    – HippoDuck
    Jan 23, 2018 at 15:51
  • 5
    Well, we've come to what is known as a Mexican standoff, now haven't we? 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. Jun 24, 2020 at 2:08
26

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
    Jun 29, 2023 at 15:48
6

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
4

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.