How do I extract tar.xz files in Linux? Can you tell me command to unzip linux-5.6.13.tar.xz file? How can I uncompressing (or decompressing) all files in the current directory?
The tar command and xz command provides support for extracting and uncompressing tar.xz files and .txz archives under Linux operating systems.
How do I extract tar.xz files in Linux?
The syntax is:
- Install xz using the dnf install xz on a CentOS/RHEL/Fedora Linux.
- Debian/Ubuntu Linux users try apt install xz-utils command.
- Extract tar.xz using the tar -xf backup.tar.xz command
- To decompress filename.tar.xz file run: xz -d -v filename.tar.xz
Installation
XZ is a set of open-source software for lossless data compressors, including LZMA and xz formats. These formats are popular among open source developers and projects due to higher compression rates than alternatives tools like gzip and bzip2. The tar command works if xz installed on the system. Hence, we must install it.
Debin/Ubuntu Linux install xz
Use the apt command/apt-get command:$ sudo apt install xz-utils
Sample outputs:
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 5 not upgraded.
Need to get 82.5 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 xz-utils amd64 5.2.4-1 [82.5 kB]
Fetched 82.5 kB in 1s (60.3 kB/s)
(Reading database ... 284817 files and directories currently installed.)
Preparing to unpack .../xz-utils_5.2.4-1_amd64.deb ...
Unpacking xz-utils (5.2.4-1) over (5.2.4-1) ...
Setting up xz-utils (5.2.4-1) ...
Processing triggers for man-db (2.9.1-1) ...
|
CentOS/RHEL/Fedora Linux install xz
Open the terminal app and then run NA command/dnf command as follows:$ sudo dnf install xz
## On an older version of CentOS/RHEL try yum ##
$ sudo yum install xz
From my CentOS 6.x box:
Loaded plugins: fastestmirror Setting up Install Process Loading mirror speeds from cached hostfile * base: centos.excellmedia.net * extras: centos.excellmedia.net * updates: centos.excellmedia.net Resolving Dependencies --> Running transaction check ---> Package xz.x86_64 0:4.999.9-0.5.beta.20091007git.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================= Package Arch Version Repository Size ================================================================================= Installing: xz x86_64 4.999.9-0.5.beta.20091007git.el6 base 137 k Transaction Summary ================================================================================= Install 1 Package(s) Total download size: 137 k Installed size: 477 k Is this ok [y/N]: y Downloading Packages: xz-4.999.9-0.5.beta.20091007git.el6.x86_64.rpm | 137 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : xz-4.999.9-0.5.beta.20091007git.el6.x86_64 1/1 Verifying : xz-4.999.9-0.5.beta.20091007git.el6.x86_64 1/1 Installed: xz.x86_64 0:4.999.9-0.5.beta.20091007git.el6 Complete! |
Installing xz on OpenSUSE/SUSE Enterprise Linux
We can use the zypper command to install xz:$ sudo zypper install xz
Examples
Now we install xz. We can now directly use the tar command as follows for extracting a file named linux-5.6.13.tar.xz:$ tar -xf linux-5.6.13.tar.xz
$ tar -xvf linux-5.6.13.tar.xz
$ tar -Jxvf linux-5.6.13.tar.xz
## extract tar.xz files aka .txz file ##
$ tar --xz -xf archive.txz
Extracting specific files from a tar.xz file
We extract a given file names from a backup.tar.xz file by using the following syntax:$ tar -xf backup.tar.xz resume.pdf
$ tar -xf backup.tar.xz babys-3rd-cake-day.jpg sales.txt
Sometimes we don’t know file names in advance. Hence, we list the contents of an archive by passing the -t as follows and then unzip tar.xz files:$ tar -tvf backup.tar.xz
## filter out tar listing option using the grep command/egrep command ##
$ tar -tvf backup.tar.xz | grep file1
$ tar -tvf backup.tar.xz | egrep 'file.txt|data.doc|cake.jpg'
Sample outputs:
drwxrwxr-x root/root 0 2020-05-14 11:29 linux-5.6.13/ -rw-rw-r-- root/root 15844 2020-05-14 11:29 linux-5.6.13/.clang-format -rw-rw-r-- root/root 59 2020-05-14 11:29 linux-5.6.13/.cocciconfig -rw-rw-r-- root/root 71 2020-05-14 11:29 linux-5.6.13/.get_maintainer.ignore -rw-rw-r-- root/root 62 2020-05-14 11:29 linux-5.6.13/.gitattributes -rw-rw-r-- root/root 1746 2020-05-14 11:29 linux-5.6.13/.gitignore -rw-rw-r-- root/root 15266 2020-05-14 11:29 linux-5.6.13/.mailmap -rw-rw-r-- root/root 496 2020-05-14 11:29 linux-5.6.13/COPYING -rw-rw-r-- root/root 99724 2020-05-14 11:29 linux-5.6.13/CREDITS drwxrwxr-x root/root 0 2020-05-14 11:29 linux-5.6.13/Documentation/ -rw-rw-r-- root/root 13 2020-05-14 11:29 linux-5.6.13/Documentation/.gitignore drwxrwxr-x root/root 0 2020-05-14 11:29 linux-5.6.13/Documentation/ABI/ -rw-rw-r-- root/root 3821 2020-05-14 11:29 linux-5.6.13/Documentation/ABI/README
Want to extract all Perl or Python source code files? Try the following option:$ tar --wildcards '*.py' -xvf webroot.tar.xz
$ tar --wildcards '*.pl' -xvf centos-7-sysadmin-scripts.txz
Understanding tar command options
- -x : Extract/get/unzip files from an archive.
- -f archive.tar.xz : Use this archive file or device archive for extracting files
- -J OR --xz : Filter the archive through xz command. Hence, we install xz using package manager.
- -v : Verbose. Show progress.
- -t : List file stored inside .tar.xz/.xz archive.
- --wildcards : By default, wildcards don’t work as they treated or processed to by your current shell. Therefore, to extract files, use the --wildcards options. For example, extract all .webp images I would pass --wildcards '*.webp' option to the tar.
How to extract .xz files using the xz command
So far, we learned to use tar for extracting. But, we can use xz command directly for as compressor and decompressor too. Tar internally calls xz itself or using API provided by libs. Let us see some tips and tricks for xz command.
Decompress .tar.xz file
$ xz --decompress filename.tar.xz
$ xz -v -d archives.tar.xz
Decompress file named mysql.sql.xz and replaced by mysql.sql:$ xz -v -d mysql.sql.xz
Compress tarball as .tar.xz file
Compress a file named mysql.sql and replace it by mysql.sql.xz for saving disk space:$ xz mysql.sql
The syntax is as follows for compressing per-existing tarball:$ xz -v -z filename.tar
Alternatively, use the tar command for convenience purposes$ tar -cvJf {your-filename-here.tar.xz} file1 file2
$ tar -cvJf {your-filename-here.tar.xz} /path/to/dir1 ./dir2
$ sudo tar -cvJf /efs/backups/14-05-2020/production-webroot.tar.xz /var/www/
$ sudo tar --xz -cvf /efs/backups/aws-us-west-www-prod-42-etc.txz /etc/
Compress from stdin
$ mysqldump nixcraft-blog | xz > nixcraft-blog.sql.xz
Of coruse we can uncompress and send content to stdout for the mysql command too$ xzcat nixcraft-blog.sql.xz | mysql nixcraft-blog
Let us uncompress tar directory from stdin sent from the nc, enter (assuming that target server-ip protected by VPN else use the ssh command):$ nc -l -p 4242 | tar -xJvf -
On other side compress directory to stdout and send to the nc, run:$ tar -cJvz - /var/www/html | nc server-ip-here 4242
Our final example use ssh instead of nc:$ tar --xz -cf - /path/to/dir | ssh sisrv@sisrv.net "cat > filename.txz"
Conclusion
This quick tutorial explained how to extract and unzip popular archive formats such as .tar.xz and .txz under Linux operating systems. Remember, tar command only works if you install the xz command via the package manager.