Its customary file extension is ".zst", while some tools use ".tzst" as a shorthand for ".tar.zst". --- Not sure what/if a short option would be appropriate.
configure.ac | 1 + doc/tar.1 | 4 ++++ doc/tar.texi | 12 ++++++++++-- src/buffer.c | 5 ++++- src/suffix.c | 2 ++ src/tar.c | 12 +++++++++++- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index e89ed1d..42c892c 100644 --- a/configure.ac +++ b/configure.ac @@ -250,6 +250,7 @@ TAR_COMPR_PROGRAM(lzip) TAR_COMPR_PROGRAM(lzma) TAR_COMPR_PROGRAM(lzop) TAR_COMPR_PROGRAM(xz) +TAR_COMPR_PROGRAM(zstd) AC_MSG_CHECKING(for default archive format) diff --git a/doc/tar.1 b/doc/tar.1 index f5c1fca..b140446 100644 --- a/doc/tar.1 +++ b/doc/tar.1 @@ -828,6 +828,10 @@ Filter the archive through \fB\-Z\fR, \fB\-\-compress\fR, \fB\-\-uncompress\fR Filter the archive through .BR compress (1). +.TP +\fB\-\-zstd\fR +Filter the archive through +.BR zstd (1). .SS Local file selection .TP \fB\-\-add\-file\fR=\fIFILE\fR diff --git a/doc/tar.texi b/doc/tar.texi index 64d1268..a5f66e0 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -3713,6 +3713,10 @@ only attributes from the user namespace. @itemx -J Use @command{xz} for compressing or decompressing the archives. @xref{gzip}. +@opsummary{zstd} +@item --zstd +Use @command{zstd} for compressing or decompressing the archives. @xref{gzip}. + @end table @node Short Option Summary @@ -9569,6 +9573,7 @@ switch to @samp{posix}. @cindex lzma @cindex lzop @cindex compress +@cindex zstd @GNUTAR{} is able to create and read compressed archives. It supports a wide variety of compression programs, namely: @command{gzip}, @command{bzip2}, @command{lzip}, @command{lzma}, @command{lzop}, @@ -9585,8 +9590,9 @@ create a @command{gzip} compressed archive, @option{-j} @option{--lzip} to create an @asis{lzip} compressed archive, @option{-J} (@option{--xz}) to create an @asis{XZ} archive, @option{--lzma} to create an @asis{LZMA} compressed -archive, @option{--lzop} to create an @asis{LSOP} archive, and -@option{-Z} (@option{--compress}) to use @command{compress} program. +archive, @option{--lzop} to create an @asis{LSOP} archive, +@option{-Z} (@option{--compress}) to use @command{compress} program, +and @option{--zstd} to create a @asis{ZSTD} archive. For example: @smallexample @@ -9779,6 +9785,8 @@ suffix. The following suffixes are recognized: @item @samp{.tlz} @tab @command{lzma} @item @samp{.lzo} @tab @command{lzop} @item @samp{.xz} @tab @command{xz} +@item @samp{.zst} @tab @command{zstd} +@item @samp{.tzst} @tab @command{zstd} @end multitable @anchor{use-compress-program} diff --git a/src/buffer.c b/src/buffer.c index 6f96c2f..94d30c8 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -281,7 +281,8 @@ enum compress_type { ct_lzip, ct_lzma, ct_lzop, - ct_xz + ct_xz, + ct_zstd }; static enum compress_type archive_compression_type = ct_none; @@ -310,6 +311,7 @@ static struct zip_magic const magic[] = { { ct_lzma, 6, "\xFFLZMA" }, { ct_lzop, 4, "\211LZO" }, { ct_xz, 6, "\xFD" "7zXZ" }, + { ct_zstd, 4, "\x28\xB5\x2F\xFD" }, }; #define NMAGIC (sizeof(magic)/sizeof(magic[0])) @@ -325,6 +327,7 @@ static struct zip_program zip_program[] = { { ct_lzma, XZ_PROGRAM, "-J" }, { ct_lzop, LZOP_PROGRAM, "--lzop" }, { ct_xz, XZ_PROGRAM, "-J" }, + { ct_zstd, ZSTD_PROGRAM, "--zstd" }, { ct_none } }; diff --git a/src/suffix.c b/src/suffix.c index 47027e7..66b5694 100644 --- a/src/suffix.c +++ b/src/suffix.c @@ -46,6 +46,8 @@ static struct compression_suffix compression_suffixes[] = { { S(lzo, LZOP) }, { S(xz, XZ) }, { S(txz, XZ) }, /* Slackware */ + { S(zst, ZSTD) }, + { S(tzst, ZSTD) }, { NULL } #undef S #undef __CAT2__ diff --git a/src/tar.c b/src/tar.c index 2a5f86e..a440590 100644 --- a/src/tar.c +++ b/src/tar.c @@ -348,7 +348,8 @@ enum WARNING_OPTION, XATTR_OPTION, XATTR_EXCLUDE, - XATTR_INCLUDE + XATTR_INCLUDE, + ZSTD_OPTION, }; static char const doc[] = N_("\ @@ -682,6 +683,7 @@ static struct argp_option options[] = { {"lzma", LZMA_OPTION, 0, 0, NULL, GRID+1 }, {"lzop", LZOP_OPTION, 0, 0, NULL, GRID+1 }, {"xz", 'J', 0, 0, NULL, GRID+1 }, + {"zstd", ZSTD_OPTION, 0, 0, NULL, GRID+1 }, #undef GRID #define GRID 100 @@ -1129,6 +1131,10 @@ tar_help_filter (int key, const char *text, void *input) s = xasprintf (_("filter the archive through %s"), XZ_PROGRAM); break; + case ZSTD_OPTION: + s = xasprintf (_("filter the archive through %s"), ZSTD_PROGRAM); + break; + case ARGP_KEY_HELP_EXTRA: { const char *tstr; @@ -1652,6 +1658,10 @@ parse_opt (int key, char *arg, struct argp_state *state) set_use_compress_program_option (COMPRESS_PROGRAM, args->loc); break; + case ZSTD_OPTION: + set_use_compress_program_option (ZSTD_PROGRAM, args->loc); + break; + case ATIME_PRESERVE_OPTION: atime_preserve_option = (arg -- 2.15.0