Exclude Files and Directories While Creating Tar File

The tar command is used for creating archive files from various files and folders.

It's quite simple when you have all the required files in one place. But what if you want to put some files or folders in the tar file and exclude some?

One way would be to copy those required files into a new directory and then proceed with the standard procedure, but it is not an efficient way.

Instead, you can tell the tar command to exclude the undesired files in this manner:

tar --exclude="File_to_exclude" [options] [archive_name] [path]

By the way, that's not the only way to do it. Let me show you a couple of methods here.

But before I jump to the guide, I'd like to show you the directory containing multiple files and sub-directories which I'm going to utilize in this guide:

Now, let's proceed with the first method.

Method 1.  Using -exclude option

To use the -exclude option, you'd need to follow the given command syntax:

tar --exclude="File_to_exclude" [options] [archive_name] [path]

For example, I'll be creating a tarball named IHateC excluding HelloWorld.c file:

tar --exclude='HelloWorld.c' -zcvf IHateC.tar.gz .

First, let me break down the used options here:

  • z uses the gzip utility to compress files in the archive.
  • c is responsible for creating a new archive file.
  • f allows users to specify the name of the new archive.
  • v (verbose) gets us a list of processed files and directories to create archive files.

And the . used at the end of the command indicates I want to utilize the current working directory.

To check the contents of the tar file, you can use the tar command with the -tf option:

tar -tf IHateC.tar.gz

but what about excluding multiple files and directories? Here you go.

Excluding multiple files and directories

To exclude multiple files and directories, you can use the chain of --exclude.

For example, I'll disclude Bash.sh and the subdirectory named Sub-Directory-1:

tar --exclude='Bash.sh' --exclude='Sub-Directory-1' -zcvf NoDir.tar.gz .

But this command can get too long if you're supposed to exclude various files. And if they have the same extension, things can get a lot easier!

Use file extension to exclude files

You just have to pair the file extension with the --exclude and it will get your job done.

For example, I want to exclude every .mp3 file while creating tarball, then I'd have to follow the given command:

tar --exclude='*.mp3' -zcvf NoMp3.tar.gz .

Method 2. Using a text file to exclude files and directories

In this method, I'll be creating a text file containing the names of files and directories that I want to exclude.

So I made a text file containing 3 filenames that I want to exclude named exclude.txt :

So now I only have to use that text file to exclude files:

tar -zcvf NewFile.tar.gz --exclude-from="exclude.txt" .

And that's it!

Final Words

This was my take on how you can exclude files and directories while creating tar files in the easiest way possible.

And if you have any queries, you're welcome to extract them in the comments!