ouch (work in progress)
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 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
How does it work?
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 <input>...
FLAGS:
-h, --help Displays this message and exits
-V, --version Prints version information
OPTIONS:
-i, --input <input>... The input files or directories.
-o, --output <output> The output directory or compressed file.
Examples
Decompressing a bunch of files
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.
Decompressing a bunch of files into a folder
# Decompresses file1.tar.gz, file2.tar.gz, file3.tar.gz and videos.tar.bz2 to some-folder
# The 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.
Compressing files
Error scenarios
No clear decompression algorithm
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.
Similar errors are shown if the same scenario is applied to .lz/.lzma
and .bz/.bz2
.
Installation
Runtime dependencies
ouch
depends on a few widespread libraries:
- libbz2
- liblzma
Both should be already installed in any mainstream Linux distribution.
If they're not, then:
- On Debian-based distros
sudo apt install liblzma-dev libbz2-dev
- On Arch-based distros
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.
Build process
Once the dependency requirements are met:
- Installing from Crates.io
- Cloning and building
# or
&&
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.
Supported operating systems
ouch
should be cross-platform but is currently only tested (and developed) on Linux, on both x64-64 and ARM.
Limitations
ouch
does encoding and decoding in-memory, so decompressing very large files with ouch
is not advisable.
Contributions
Any contributions and suggestions are welcome!