Understanding 7z command switches - part I

On this page

7z is no doubt a feature-rich and powerful archiver (claimed to offer the highest compression ratio). Here at HowtoForge, we have already discussed how you can install and use it. But the discussion was limited to basic features that you can access using the 'function letters' the tool provides.

Expanding our coverage on the tool, here in this tutorial, we will be discussing some of the 'switches' 7z offers. But before we proceed, it's worth sharing that all the instructions and commands mentioned in this tutorial have been tested on Ubuntu 16.04 LTS.

Note: We will be using the files displayed in the following screenshot for performing various operations using 7zip.

Include files

The 7z tool allows you selectively include files in an archive. This feature can be accessed using the -i switch.

Syntax:

-i[r[-|0]]{@listfile|!wildcard}

For example, if you want to include only ‘.txt’ files in your archive, you can use the following command:

$ 7z a ‘-i!*.txt’ include.7z

Here is the output:

Now, to check whether the newly-created archive file contains only ‘.txt’ file or not, you can use the following command:

$ 7z l include.7z

Here is the output:

In the above screenshot, you can see that only ‘testfile.txt’ file has been added to the archive.

Exclude files

If you want, you can also exclude the files that you don’t need. This can be done using the -x switch.

Syntax:

-x[r[-|0]]]{@listfile|!wildcard}

For example, if you want to exclude a file named ‘abc.7z’ from the archive that you are going to create, then you can use the following command:

$ 7z a ‘-x!abc.7z’ exclude.7z

Here is the output:

To check whether the resulting archive file has excluded ‘abc.7z’ or not, you can use the following command:

$ 7z l exclude.7z

Here is the output:

In the above screenshot, you can see that ‘abc.7z’ file has been excluded from the new archive file.

Pro tip: Suppose the task is to exclude all the .7z files with names starting with letter ‘t’ and include all .7z files with names starting with letter ‘a’ . This can be done by combining both ‘-i’ and ‘-x’ switches in the following way:

$ 7z a '-x!t*.7z' '-i!a*.7z' combination.7z

Set password for your archive

7z also lets you password protect your archive file. This feature can be accessed using the -p switch.

Needless to say, when you will extract your password protected archive, the tool will ask you for the password. To extract a password-protected file, use the 'e' function letter. Following is an example:

$ 7z e password.7z

Set output directory

The tool also lets you extract an archive file in the directory of your choice. This can be done using the -o switch. Needless to say, the switch only works when the command contains either the ‘e’ function letter or the ‘x’ function letter.

$ 7z [e/x] [existing-archive-filename] -o[path-of-directory]

For example, suppose the following command is run in the present working directory:

$ 7z e output.7z -ohow/to/forge

And, as the value passed to the -o switch suggests, the aim is to extract the archive in the ./how/to/forge directory.

Here is the output:

In the above screenshot, you can see that all the contents of existing archive file has been extracted. But where? To check whether or not the archive file has been extracted in the ./how/to/forge directory or not, we can use the ‘ls -R’ command.

In the above screenshot, we can see that all the contents of output.7z have indeed been extracted to ./how/to/forge.

Creating multiple volumes

With the help of the 7z tool, you can create multiple volumes (smaller sub-archives) of your archive file. This is very useful when transferring large files over a network or in a USB. This feature can be accessed using the -v switch. The switch requires you to specify size of sub-archives.

We can specify size of sub-archives in bytes (b), kilobytes (k), megabytes (m) and gigabytes (g).

Let's understand this using an example. Please note that we will be using a new directory for performing operations on the -v switch.

Here is the screenshot of the directory contents:

Now, we can run the following command for creating multiple volumes (sized 100b each) of an archive file:

7z a volume.7z * -v100b

Here is the screenshot:

Now, to see the list of sub-archives that were created, use the ‘ls’ command.

As seen in the above screenshot, a total of four multiple volumes have been created - volume.7z.001, volume.7z.002, volume.7z.003, and volume.7z.004

Note: You can extract files using the .7z.001 archive. But, for that, all the other sub-archive volumes should be present in the same directory.

Set compression level of archive

7z also allows you to set compression levels of your archives. This feature can be accessed using the -m switch. There are various compression levels in 7z, such as -mx0, -mx1, -mx3, -mx5, -mx7 and -mx9.

Here's a brief summary about these levels:

-mx0 = Don't compress at all - just copy the contents to archive.-mx1 = Consumes least time, but compression is low.-mx3 = Better than -mx1.-mx5 = This is default (compression is normal).-mx7 = Maximum compression.-mx9 = Ultra compression.

For example, we have a bunch of files and folders in a directory, which we tried compressing using a different compression level each time. Just to give you an idea, here's the command used when the archive was created with compression level '0'.

$ 7z a compression(-mx0).7z * -mx=0

Similarly, other commands were executed.

Here is the list of output archives (produced using the 'ls' command), with their names suggesting the compression level used in their creation, and the fifth column in the output revealing the effect of compression level on their size.

Display technical information of archive

If you want, 7z also lets you display technical information of an archive - it's type, physical size, header size, and so on - on the standard output. This feature can be accessed using the -slt switch. This switch only works with the ‘l’ function letter.

$ 7z l -slt [archive-filename]

For example:

$ 7z l -slt abc.7z

Here is the output:

Specify type of archive to create

If you want to create a non 7zip archive (which gets created by default), you can specify your choice using the -t switch.

The output file produced is 'howtoforge.zip'. To cross verify its type, use the 'file' command:

So, howtoforge.zip is indeed a ZIP file. Similarly, you can create other kind of archives that 7z supports.

Conclusion

As you would agree, the knowledge of 7z 'function letters' along with 'switches' lets you make the most out of the tool. We aren't yet done with switches - there are some more that will be discussed in part 2.

About Himanshu Arora

Himanshu Arora has been working on Linux since 2007. He carries professional experience in system level programming, networking protocols, and command line. In addition to HowtoForge, Himanshu's work has also been featured in some of world's other leading publications including Computerworld, IBM DeveloperWorks, and Linux Journal.