You can easily exclude specific files and/or folders from a zip archive with Linux Mint and it's terminal.

In this post we will demonstrate several useful examples on how to zip folder and exclude specific files and folders. Excluding files might be due to sensitive data, big size or specific file type like: zip, png or csv.

Step 1: How to zip files with terminal in Linux Mint

To begin, lets show how folder or file can be archived with terminal in Linux Mint.

In the example below, we'll work with a folder called: Mapache which will be used for our example. So you can download the folder from the link above.

So to zip the folder Mapache we can use next commands:

cd ~/Downloads
zip -r  mapache.zip Mapache

Note: Command cd ~/Downloads is optional and navigates to the parent folder of Mapache.

Zip file with keeping date and time

If you like to keep history of the dates of the archives than you can try with the next command:

zip -r  mapache_$(date +\%Y-\%m-\%d-\%H-\%M).zip Mapache

which will produce a zip file like:

mapache_2021-07-21-00-26

Zip folder without including parent directory

To zip a folder without including the parent folder use:

cd Mapache
zip -r  ../mapache_$(date +\%Y-\%m-\%d-\%H-\%M).zip . -x */\.* *.git* *.idea* "**/screenshot.png" ./screenshot.png

Step 2: How to exclude files from a zip archive

To exclude a file from archive using the zip command you can use:

  • -x
  • --exclude

both are interchangeable.

Exclude file from the root folder

So for example let's try to exclude a file: screenshot.png. If the file is at the top level than it can be excluded by

zip -r  mapache.zip Mapache -x "screenshot.png"

for excluding multiple files we can list than all after the -x:

zip -r  mapache.zip Mapache -x "screenshot.png" "donate.gif"

Note 1: this will work only if the files are at the top level.

Note 2: You can have multiple exclude options: zip -r mapache.zip Mapache -x "screenshot.png" -x "donate.gif"

Exclude file from the subfolders

If the files are located in a subfolder than they can be excluded by slightly different syntax:

zip -r  mapache.zip Mapache  -x "**/screenshot.png"

where **/ is used to show recursive search.

Exclude files by file extension

Let say that you would like to** exclude specific file types like: .csv**, .zip etc. This can be done by next command:

zip -r  mapache.zip Mapache  -x "*.csv"

exclude-files-from-zip-archive-linux-mint

Step 3: How to exclude folders from a zip archive

To exclude folders from a zip archive you can follow a bit different syntax. Let's say that you would like to exclude folder documentation then you can do:

zip -r  mapache.zip Mapache --exclude=*documentation*

Step 4: Popular file/folder exclusions - exclude git, hidden files

In this step are listed the most popular files exclusions like:

To exclude all folders (and files) starting with a dot(hidden files)

zip -r  mapache.zip Mapache --exclude=*/.*

To exclude .git directory from a zip Archive

zip -r  mapache.zip Mapache -x "*.git*"

or

zip -r  mapache.zip Mapache -x '*.git*'

To exclude .git directory from a zip Archive with git

As an alternative of zip command for git project you can use:

git archive -o mapache.zip HEAD

The plus of this command is that this will exclude the git folder and also anything that is in the gitignore file.

To exclude zip files from a zip Archive

The next command will prevent all archive files from zipping.

zip -r  mapache.zip Mapache -x \*.zip

Step 5: Script to zip files and exclude specific files and folder

Let's say that you want to build a script which is going to zip the folder and exclude folders and files.

To do so you can create new text file called mapache.sh and put next content inside:

#!/bin/bash
cd Mapache
zip -r  ../mapache_$(date +\%Y-\%m-\%d-\%H-\%M).zip . -x */\.* *.git* *.idea* "**/screenshot.png" ./screenshot.png

Make it executable by:

chmod +x mapache.sh

The file should be located at the same level as folder Mapache.