ouch
is the Obvious Unified Compression (and decompression) Helper.
| Supported formats | .tar | .zip | .tar.{.lz,.gz, .bz} | .zip.{.lz, .gz, .bz*} | .bz | .gz | .lz, .lzma | |-------------------|------|------|------------------------------|------------------------------|-----|-----|------------| | Decompression | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Compression | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ouch
infers commands from the extensions of its command-line options.
``` ouch 0.1.3 Vinícius R. Miguel ouch is a unified compression & decompression utility
USAGE: ouch [OPTIONS] --input ...
FLAGS: -h, --help Displays this message and exits -V, --version Prints version information
OPTIONS: -i, --input ... The input files or directories. -o, --output
bash
$ ouch -i file{1..5}.zip another_file.tar.gz yet_another_file.tar.bz
When no output file is supplied, ouch
infers that it must decompress all of its input files into the current folder. This will error if any of the input files are not decompressible.
```bash $ ouch -i file{1..3}.tar.gz videos.tar.bz2 -o some-folder
ouch
saves to will be created if it doesn't already exist```
When the output file is not a compressed file, ouch
will check if all input files are decompressible and infer that it must decompress them into the output folder.
bash
$ ouch -i file{1..20} -o archive.tar
$ ouch -i Videos/ Movies/ -o media.tar.lzma
$ ouch -i src/ Cargo.toml Cargo.lock -o my_project.tar.gz
bash
$ ouch -i some-file -o some-folder
error: file 'some-file' is not decompressible.
ouch
cannot infer some-file
's compression format since it lacks an extension. Likewise, ouch
cannot infer that the output file given is a compressed file, so it shows the user an error.
bash
$ ouch -i file other-file -o files.gz
error: cannot compress multiple files directly to Gzip.
Try using an intermediate archival method such as Tar.
Example: filename.tar.gz
Similar errors are shown if the same scenario is applied to .lz/.lzma
and .bz/.bz2
.
ouch
depends on a few widespread libraries:
* libbz2
* liblzma
Both should be already installed in any mainstream Linux distribution.
If they're not, then:
sudo apt install liblzma-dev libbz2-dev
sudo pacman -S xz bzip2
The last dependency is a recent Rust toolchain. If you don't have one installed, follow the instructions at rustup.rs.
Once the dependency requirements are met:
bash
cargo install ouch
```bash git clone https://github.com/vrmiguel/ouch cargo install --path ouch
cd ouch && cargo run --release ```
I also recommend stripping the release binary. ouch
's release binary (at the time of writing) only takes up a megabyte in space when stripped.
ouch
should be cross-platform but is currently only tested (and developed) on Linux, on both x64-64 and ARM.
ouch
does encoding and decoding in-memory, so decompressing very large files with ouch
is not advisable.
Any contributions and suggestions are welcome!