ouch stands for Obvious Unified Compression Helper.
It's a CLI tool for compressing and decompressing various formats.
Features
- Easy to use.
- Fast.
- Great error message feedback.
- No runtime dependencies (when using the Linux static binary).
- Accessibility mode (see more).
- Shell completions and man pages.
Usage
ouch has three main subcommands:
ouch decompress(aliasd)ouch compress(aliasc)ouch list(aliaslorls)
To see help for a specific command:
ouch help <COMMAND> ouch <COMMAND> --help # equivalent
Decompressing
Use the decompress subcommand, ouch will detect the extensions automatically.
ouch decompress a.zip
# Decompress multiple files
ouch decompress a.zip b.tar.gz c.tarThe -d/--dir flag can be used to redirect decompression results to another directory.
# Decompress 'summer_vacation.zip' inside of new folder 'pictures'
ouch decompress summer_vacation.zip --dir picturesCompressing
Pass input files to the compress subcommand, add the output file at the end.
# Compress two files into `archive.zip` ouch compress one.txt two.txt archive.zip # Compress file.txt using .lz4 and .zst ouch compress file.txt file.txt.lz4.zst
ouch detects the extensions of the output file to decide what formats to use.
Listing
ouch list archive.zip
# Example with tree formatting
ouch list source-code.zip --treeOutput:
└── src
├── archive
│ ├── mod.rs
│ ├── tar.rs
│ └── zip.rs
├── utils
│ ├── colors.rs
│ ├── formatting.rs
│ ├── mod.rs
│ └── fs.rs
├── commands
│ ├── list.rs
│ ├── compress.rs
│ ├── decompress.rs
│ └── mod.rs
├── accessible.rs
├── error.rs
├── cli.rs
└── main.rs
Supported formats
| Format | .tar |
.zip |
.7z |
.gz |
.sz |
.zst |
.xz |
.lzma |
.lz |
.bz, .bz2 |
.bz3 |
.lz4 |
.rar |
.br |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Supported | ✓ | ✓¹ | ✓¹ | ✓² | ✓² | ✓² | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓³ | ✓ |
✓: Supports compression and decompression.
✓¹: Due to limitations of the compression format itself, (de)compression can't be done with streaming.
✓²: Supported, and compression runs in parallel.
✓³: Due to RAR's restrictive license, only decompression and listing can be supported.
If you wish to exclude non-free code from your build, you can disable RAR support
by building without the unrar feature.
Aliases for these formats are also supported:
tar:tgz,tbz,tbz2,tlz4,txz,tlzma,tsz,tzst,tlz,cbtzip:cbz7z:cb7rar:cbr
Formats can be chained:
.tar.gz.tar.gz.xz.zst.gz.lz4.sz
If the filename has no extensions, ouch will try to infer the format by the file signature and ask the user for confirmation.
Installation
Refer to the packages list on the right.
The most commonly used installation methods:
On Arch Linux
On MacOS via Homebrew
On Windows via Scoop
From crates.io
(If you're on Ubuntu, you might need to install clang to build it from crates.io.)
Download the latest release bundle
Check the releases page.
Compiling from source code
Check the wiki guide on compiling.
Runtime Dependencies
If running ouch results in a linking error, it means you're missing a runtime dependency.
If you're downloading binaries from the releases page, try the musl variants, those are static binaries that require no runtime dependencies.
Otherwise, you'll need these libraries installed on your system:
These should be available in your system's package manager.
Benchmarks
Benchmark results are available here. Performance of compressing and decompressing Rust source code is measured and compared with Hyperfine. The values presented are the average (wall clock) elapsed time.
Note: ouch focuses heavily on usage ergonomics and nice error messages, but
we plan on doing some optimization in the future.
Versions used:
Contributing
Contributions of all sizes are welcome and appreciated!
- Open an issue.
- Package it for your favorite distribution or package manager.
- Share it with a friend!
- Open a pull request.
If you're creating a Pull Request, check CONTRIBUTING.md.