I use
tar -cJvf resultfile.tar.xz files_to_compress
to create tar.xz
and
tar -xzvf resultfile.tar.xz
to extract the archive in current directory. How to use multi threading in both cases? I don't want to install any utilities.
I use
tar -cJvf resultfile.tar.xz files_to_compress
to create tar.xz
and
tar -xzvf resultfile.tar.xz
to extract the archive in current directory. How to use multi threading in both cases? I don't want to install any utilities.
tar -c -I 'xz -9 -T0' -f archive.tar.xz [list of files and folders]
This compresses a list of files and directories into an .tar.xz
archive. It does so by specifying the arguments to be passed to the xz
subprocess, which compresses the tar archive.
This is done using the -I
argument to tar, which tells tar
what program to use to compress the tar archive, and what arguments to pass to it. The -9
tells xz
to use maximum compression. The -T0
tells xz
to use as many threads as you have CPUs.
An update from January, 2024:
Even when using the multithreading option, xz
barely scales beyond two threads, besides its compression/decompression performance is relatively low.
I highly recommend using ZSTD
instead. The command will be:
tar -c -I 'zstd -22 --ultra --long -T0' -f archive.tar.xz [list of files and folders]
Caveats:
ultra/long
options to decrease RAM consumption.You can use XZ_DEFAULTS
or XZ_OPT
environment variables:
XZ_DEFAULTS is recommended to be used as a system wide configuration, typically set in a shell initialization script.
XZ_OPT is for passing options to xz
when run by a script or tool, e.g. GNU tar
. See man xz
.
Example: using multiple threads (-T0
) and max compression level (-9
):
XZ_OPT='-T0 -9' tar -cJf resultfile.tar.xz files_to_compress
Reference with a recent GNU tar on bash or derived shell, also see the xz man page
For older tars, this works:
tar -cf - list of files and folders| xz -9 -T0 >| archive.tar.T.xz
-I
won't accept arguments, and expects a program only. Maybe you can make a simple shell script that isexec xz -9 -T0 $*
? – ZiggyTheHamster Oct 14 '20 at 01:51$*
is redundant. Also, not sure why you want to useexec
. – Artem S. Tashkinov Oct 14 '20 at 09:39tar: Couldn't open xz -9 -T0: No such file or directory
here (macOS). The following from another answer worked:tar -cf - list of files and folders| xz -9 -T0 >| archive.tar.T.xz
– aaronk6 Jan 07 '22 at 12:55