stuffr-cli
The stuffr command — a universal compression and archive toolkit in Rust, one
command for the whole format space.
Install
The binary is called stuffr, but it is built from the stuffr-cli
package, so that is the name cargo install needs:
cargo install stuffr does not work — stuffr is the library crate and has
no binary target. (Same arrangement as ripgrep's ripgrep / rg.)
The default build is pure Rust and needs no C toolchain. To link the two vendored C backends instead — a faster xz/LZMA encoder and a strong zstd encoder:
The five legacy formats (Unix compress .Z, LHA/LZH, ARJ, ARC/PAK, ZOO)
are in the default build too, pure Rust like the rest of it — no extra flag
needed. compress, lha and arj read AND write as of Phase 3c (lha reads
seven compression methods and writes -lh5-; arj reads five and writes only
the uncompressed one, so an ARJ archive stuffr writes is larger than its
input — and nothing outside this project has ever read one, since no
arj/unarj tool is obtainable); arc and zoo are read-only
and refuse pack --format <name> at exit 3.
--features legacy still exists and still works; it only matters paired with
--no-default-features (e.g. --no-default-features --features pure, the
build the purity CI job checks, is the one combination that excludes them).
Use
- means stdin everywhere, so curl … | stuffr cat - | grep pattern works.
Twelve codecs — gzip, zlib, deflate, bzip2, brotli, lz4,
snappy, zstd, xz, lzma, lzip and Unix compress (.Z), all
round-trip — and eight containers: tar, ar, cpio (newc only),
zip/zip64, lha and arj are six round-trip containers, and arc/PAK
and zoo are two read-only containers. That is what a plain
cargo install stuffr-cli gives you; stuffr formats prints the matrix for
the build you actually have.
Invoked as bzip2, bunzip2, bzcat, bzip2recover, gzip, gunzip,
zcat or gzcat, the binary behaves as that tool, byte for byte on stdout,
stderr and exit codes. stuffr install-links --dir DIR makes the links, and
nothing makes them for you. The gzip names follow the platform (GNU gzip, or
Apple's on macOS and the BSDs); STUFFR_GZIP_FLAVOR=gnu|bsd overrides that.
Full documentation, including the safety defaults and the two build tiers, is in the project README.
License
MIT, with ported code under other permissive licences: the crate's
metadata is MIT AND bzip2-1.0.6 AND BSD-2-Clause AND BSD-3-Clause. The
notices ship as LICENSE-bzip2 and LICENSE-gzip-bsd.