(WIP) Taking the pain away from file (de)compression

Overview

Ouch!

ouch loosely stands for Obvious Unified Compression files Helper and aims to be an easy and intuitive way of compressing and decompressing files on the command-line.

Usage

Decompressing files

To decompress any number of files, just supply them to ouch.

Use the -o, --output flag to redirect the output of decompressions to a folder.

# Decompress `a.zip`
ouch a.zip

# Decompress multiple files
ouch a.zip b.tar.gz

# Decompress multiple files but inside new_folder
ouch a.zip  b.tar.gz  c.tar.bz2 -o new_folder

Compressing files and directories

The compress subcommand is able to compress files and folders. The last argument will be the output file.

You can also use the c alias for this subcommand.

The compression format employed will be defined according to the output file's extension.

# Compress four files into `archive.zip`
ouch compress a b c d archive.zip

# Compress three files into a `.tar.bz2` archive
ouch compress a.mp4 b.jpg c.png files.tar.bz2

# Compress a folder and a file into `videos.tar.xz`
ouch compress Videos/ funny_meme.mp4 videos.tar.xz

# Compress two folders into a lzma file
ouch c src/ target/ build.tar.lz

Listing the elements of an archive

  • Upcoming feature
# Shows the files and folders contained in videos.tar.xz
ouch list videos.tar.xz

Supported formats

.tar .zip .tar.*¹ .zip.*² .bz, .bz2 .gz .xz, .lz, .lzma .7z
Decompression
Compression
Note: .tar.*¹: .tar.gz, .tar.bz, .tar.bz2, .tar.xz, .tar.lz, .tar.lzma, .tar.zip
      .zip.*²: .zip.gz, .zip.bz, .zip.bz2, .zip.xz, .zip.lz, .zip.lzma, .zip.zip

Installation

Getting a pre-compiled binary

curl -s https://raw.githubusercontent.com/vrmiguel/ouch/master/install.sh | bash

Building

A recent Rust toolchain is needed to build ouch. You can install it following the instructions at rustup.rs.

Once Cargo is installed, run:

cargo install ouch
# or 
git clone https://github.com/vrmiguel/ouch
cargo install --path ouch
# or
git clone https://github.com/vrmiguel/ouch
cd ouch && cargo run --release

Supported operating systems

ouch runs on Linux, macOS and Windows 10. Binaries are available on our Releases page.

Binaries are also available at the end of each (successful) GitHub Actions run for these targets:

  • Linux x86-64 statically linked (musl libc)
  • macOS x86-64 dynamically linked
  • Windows 10
  • Linux ARMv7 dynamically linked (glibc)

One must be logged into GitHub to access build artifacts.

Limitations

ouch does encoding and decoding in-memory, so decompressing very large files with it is not advisable.

Comments
  • Automatically decompress the archive into a directory if there is no directory for the contents in the archive

    Automatically decompress the archive into a directory if there is no directory for the contents in the archive

    For instance, I got a zip file containing multiple dirs and files in it, but they have no parent directory.

    When you decompress it using ouch d dir.zip all the contents will be decompressed into the current directory which may already contains a lot of other dirs or files.

    It is better to automatically decompress the archive into a new directory, the name of the directory should be the file name of the archive without the extension. If you think it is not a good idea by default, an option can be provided.

    For example, command unar can do it(unar is the command from unarchiver package, link is https://github.com/MacPaw/XADMaster)

    opened by c02y 19
  • Redirect all text output to stderr and add flag to suppress non-errors

    Redirect all text output to stderr and add flag to suppress non-errors

    Originally posted by @marcospb19 in https://github.com/ouch-org/ouch/issues/110#issuecomment-946958436

    Steps

    1. Use eprint instead of print.
    2. add -q/--quiet flag.

    Reasoning:

    1. Will make it possible for us to use STDOUT as the output of compression and decompression.
    2. With everything in the stderr, the user loses the ability of redirecting only the errors to a log file, by adding the --quiet flag, we provide a decent way of logging it.

    Example of redirection:

    ouch decompress -q file.xz 2> ouch.log
    
    enhancement medium priority 
    opened by marcospb19 17
  • Create AUR package `ouch-bin`

    Create AUR package `ouch-bin`

    So aur helpers users can install it like:

    yay -S ouch
    # while also being possible:
    # yay -S ouch-bin
    

    Using the suffix -bin is a convention for when the installation just downloads a binary.

    NOTE: passing ouch as an argument instead of the full name is achievable by using the provides field in the PKGBUILD file.

    NOTE²: maybe in the future we will ship it with shell completions too.

    low priority installation 
    opened by marcospb19 15
  • Migrate from `oof` to `clap`

    Migrate from `oof` to `clap`

    It's a single commit with many changes, sorry about that but I wasn't sure how to break it down. Here are the help messages for reference:

    $ ouch --help
    ouch 0.2.0
    
    Vinícius Rodrigues Miguel <[email protected]>:João M. Bezerra <[email protected]>
    
    A command-line utility for easily compressing and decompressing files and directories.
    
    USAGE:
        ouch [OPTIONS] <SUBCOMMAND>
    
    OPTIONS:
        -h, --help       Print help information
        -n, --no         Skip overwrite questions negatively
        -V, --version    Print version information
        -y, --yes        Skip overwrite questions positively
    
    SUBCOMMANDS:
        compress      Compress files.    Alias: c
        decompress    Compress files.    Alias: d
        help          Print this message or the help of the given subcommand(s)
    
    $ ouch c --help
    ouch-compress 
    
    Compress files.    Alias: c
    
    USAGE:
        ouch compress <FILES>... <OUTPUT>
    
    ARGS:
        <FILES>...    Files to be compressed
        <OUTPUT>      The resulting file. Its extensions specify how the files will be compressed
                      and they need to be supported
    
    OPTIONS:
        -h, --help    Print help information
    
    $ ouch d --help
    ouch-decompress 
    
    Compress files.    Alias: d
    
    USAGE:
        ouch decompress [OPTIONS] <FILES>...
    
    ARGS:
        <FILES>...    Files to be decompressed
    
    OPTIONS:
        -h, --help               Print help information
        -o, --output <OUTPUT>    Decompress files in a directory other than the current
    

    This closes #105

    hacktoberfest-accepted 
    opened by SpyrosRoum 14
  • Implement command 'list' to show archive contents

    Implement command 'list' to show archive contents

    This implements a new command 'list' (alias 'l') to show archive contents.

    I was unsure how to handle displaying directories: In tar archives, each directory is listed as a separate file, while zip archives only list the files.

    for example, having a file in nested dirs like so: a/b/file.txt will display as

    $ ouch list archive.tar
    a
    a/b
    a/b/file.txt
    

    for tar archives and as

    $ ouch list archive.zip
    a/b/file.txt
    

    for zip archives.

    This is matching with the output of unzip -l archive.zip and tar -tf archive.tar but if we compine those in a single tool, maybe it would be preferable to choose only one of the above.


    Currently only simple listing, 1 file per line, no tree and no further information is implemented. A --tree command line option is included, that's what I will be working on next. Further, I added a FileInArchive struct as a common structure for both tar and zip archive files, this currently only contains the file's path, but metadata can be added in the future.

    I wasn't sure how much functionality should be added to the list command: from "just print out some files" to "exa-style formatting" anything would be possible, but where to draw the line?

    Maybe a tracking issue would be a good idea here (if me working on that command is of interest to you guys at all ^^ I don't want to push you to changes you're not comfortable with in this project :) )

    hacktoberfest-accepted 
    opened by AntonHermann 13
  • Generate shell completions and man page

    Generate shell completions and man page

    Moved some parts of cli.rs to opts.rs, ouch::cli::{Opts, QuestionPolicy, Subcommand} are moved to ouch::{Opts, QuestionPolicy, Subcommand}

    This uses a build script to generate completions when GEN_COMPLETIONS=1 is present, this generates completions to $OUT_DIR/completions, for example:

    • GEN_COMPLETIONS=1 cargo build would generate completions to target/debug/build/ouch-*/out/completions
    • GEN_COMPLETIONS=1 cargo build --release --target x86_64-unknown-linux-musl would generate completions to target/x86_64-unknown-linux-musl/release/build/ouch-*/out/completions

    A few more artifacts are generated in the completions in the x86_64-musl job:

    • completions are generated and uploaded to completions
    • man pages are generated with help2man and uploaded to ouch.1

    Design choices:

    • I chose completions to be generated to OUT_DIR, which is what rust/cargo recommends, but it also makes paths incredibly long and can possibly collide (when globbing with *) when completions are generated multiple times
    • Man page could also be gzipped
    • Completions could be in multiple artifacts, and powershell and zsh completions are named slightly intuitively since I left them as defaults

    Side notes:

    • I couldn't figure out a way for man pages to be generated inside build.rs since help2man excepts an executable, not a string
    • The current ci is very big and repetitive, I have a very similar workflow that tests, builds, and creates releases on multiple platforms that we can probably borrow from: https://github.com/figsoda/mmtc/tree/main/.github/workflows
    hacktoberfest-accepted 
    opened by figsoda 11
  • Add more tests to the argparsing library, covering all possible use cases.

    Add more tests to the argparsing library, covering all possible use cases.

    We have a custom argparsing library called oof, it's a subcrate in ouch's workspace, so we have to certify ourselves that argparsing is being done correctly.

    medium priority 
    opened by marcospb19 10
  • Wrong archive format detection patterns

    Wrong archive format detection patterns

    Bugs

    Here's a bug:

    https://github.com/ouch-org/ouch/blob/2e6cd893dcde49fbb0cf7bb8719abf0069003edb/src/commands.rs#L58

    Here's another:

    https://github.com/ouch-org/ouch/blob/2e6cd893dcde49fbb0cf7bb8719abf0069003edb/src/commands.rs#L195

    Reason

    In both cases we are pattern matching to see if the file is an archive or not.

    Formats that are archives: tgz, tar, zip, tzst, zstd, etc. No archives: xz, gz, bz, zst.

    However, we added new variants and forgot to update these patterns to match.

    https://github.com/ouch-org/ouch/blob/2e6cd893dcde49fbb0cf7bb8719abf0069003edb/src/extension.rs#L8-L20

    Solution

    Add method to CompressionFormat called is_archive_format and use it and it's negation instead.

    Then check for each non-exhaustive pattern matching done in ouch with if let, matches! and match. Reviewing if should be replaced by a call of format.is_archive_format() (or !format.is_archive_format())

    bug good first issue urgent! 
    opened by marcospb19 9
  • Truncate long messages in the progress bar

    Truncate long messages in the progress bar

    Currently if the path is too long the progress bar wraps around, and starts spamming messages in new lines.

    By using, wide_msg, long messages are automatically truncated by indicatf.

    opened by sigmaSd 8
  • [Draft] Smart decompress into a directory

    [Draft] Smart decompress into a directory

    fix https://github.com/ouch-org/ouch/issues/151

    This a bit complex and I managed to remove directories unintentionally a couple of times when writing it, so the maintainers needs to judge if this complexity is worth it.

    opened by sigmaSd 8
  • Decompression error when folder already exists at the place of output file

    Decompression error when folder already exists at the place of output file

    image

    Ouch doens't really know that there is a folder there, it just gives this error message.

    When it's not a folder, but a simple text file, it does ask if should overwrite.

    bug 
    opened by marcospb19 8
  • Improve unpacking output when creating an empty directory

    Improve unpacking output when creating an empty directory

    Creating a directory when you're...

    unpacking a zip archive:

    [INFO] File 12 extracted to "/home/marcospb19/ouch/testing/.tmpmiVaZQ/src/commands/"
    

    unpacking a tar (tar.gz.*) archive:

    [INFO] "testing/.tmpcBIpss/src/commands" extracted. (0 B)
    

    The output of both lines should be identical.

    For this, we can have a message like "Directory \"...\" created.".


    To check if a tar entry is a directory, you can call file.header.entry_type for a tar Entry, here:

    https://github.com/ouch-org/ouch/blob/5a97029bde1d0099059e0f0e6d92a82cb9266f4a/src/archive/tar.rs#L31

    and check https://docs.rs/tar/latest/tar/enum.EntryType.html#variant.Directory with .is_dir().

    enhancement good first issue 
    opened by marcospb19 0
  • Reduce the scope of some flags

    Reduce the scope of some flags

    Flags like --hidden and --gitignore are set in the Opts struct, however, they are specific to the compress subcommand, so these flags should be moved to the Subcommand::Compress enum variant.

    https://github.com/ouch-org/ouch/blob/5a97029bde1d0099059e0f0e6d92a82cb9266f4a/src/opts.rs#L28-L34

    This will hide those flags when using Ouch with other commands.

    enhancement good first issue 
    opened by marcospb19 0
  • Enable (de)compression with password

    Enable (de)compression with password

    I tried to decompress an archive that I had compressed using Ubuntu's Archive Manager with a password, but received the following error:

    $ ouch d archive.zip
    [INFO] Created temporary directory /home/afm/./.tmpaIMBF2 to hold decompressed elements.
    [INFO] File 0 extracted to "/home/afm/./.tmpaIMBF2/archive/"
    [ERROR] Unsupported zip archive
     - Password required to decrypt file
    

    Would be nice to be able to (de)compress with passwords, how do you see this? @marcospb19

    enhancement pending decision 
    opened by a-moreira 1
  • Disable smart unpack when `--dir` is provided

    Disable smart unpack when `--dir` is provided

    When decompressing an archive, there is a risk of messing up the current folder, if the archive is huge it will mix your folder with a lot of files and you'll have a hard time trying to clean it up afterwards.

    To solve this, Ouch has a hidden feature called "smart unpack", when it detects that an archive has more than one file, it creates a new folder and unpacks all the contents inside of that folder, so cleaning up is as simple as deleting that folder.

    However, if the user specified a target directory with --dir, we could (?) assume they intentionally want to decompress it into that folder directly, so "smart unpack" can be disabled, it will just create an unwanted nested folder.

    enhancement pending decision 
    opened by marcospb19 5
  • ouch doesn't like to compile with lto

    ouch doesn't like to compile with lto

    Version

    0.4.0

    Description

    I tried to build from AUR and this is standard makepkg.conf that I modified.

    These are minimal changes that I make to still build ouch:

    # Rust
    CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang
    RUSTFLAGS="-C opt-level=3 -C target-cpu=native -C linker=clang -C link-arg=-fuse-ld=lld"
    
    OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
    

    Now, let's change makepkg.conf to enable lto for rust:

    # Rust
    CARGO_PROFILE_RELEASE_LTO="thin"
    CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang
    RUSTFLAGS="-C opt-level=3 -C target-cpu=native -C linker=clang -C linker-plugin-lto -C link-arg=-flto -C link-arg=-fuse-ld=lld"
    
    OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
    

    and it throw up this error:

    ouch-0.4.0-2: parsing pkg list...
    ==> Making package: ouch 0.4.0-2 (Sun 27 Nov 2022 05:15:35 PM CET)
    ==> Checking runtime dependencies...
    ==> Checking buildtime dependencies...
    ==> WARNING: Using existing $srcdir/ tree
    ==> Starting build()...
       Compiling libc v0.2.137
       Compiling version_check v0.9.4
       Compiling pkg-config v0.3.26
       Compiling proc-macro2 v1.0.47
    error: linking with `clang` failed: exit status: 1
      |
      = note: "clang" "-m64" "/tmp/rustc9r9VB4/symbols.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.0.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.1.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.10.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.11.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.12.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.13.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.14.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.15.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.2.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.3.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.4.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.5.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.6.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.7.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.8.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.9.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.3nnc0gfx98pgnvs5.rcgu.o" "-Wl,--as-needed" "-L" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/deps" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-05737cf45bd30456.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-9f873b61fdec9b03.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-7f13930fcac1846f.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-098633b847612f3b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-f14b73d282b0245e.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-2c5b4433ebc1d822.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-59591a7b405fe395.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-384947c6d5f697ff.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-b08a86c6880b47a8.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-58adeee671f9ba8e.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-f156b880fc73e7f0.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-4458c5022988e1ab.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-02e61e5ec4aa9e8b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-a0d9b33b5161957b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-04cec55a79224c36.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-3fb6d8496dc7d6a6.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-7d46c016841a97d4.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-a1f7b8b60464cc57.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-272ca28f0b8538d5.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,-plugin-opt=O3,-plugin-opt=mcpu=znver2" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs" "-flto" "-fuse-ld=lld"
      = note: ld.lld: error: /home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/libc-d85166fb06ca004c/build_script_build-d85166fb06ca004c.build_script_build.61477c60-cgu.0.rcgu.o: Opaque pointers are only supported in -opaque-pointers mode (Producer: 'LLVM15.0.0-rust-1.65.0-stable' Reader: 'LLVM 14.0.6')
              clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
    
    
    error: linking with `clang` failed: exit status: 1
      |
      = note: "clang" "-m64" "/tmp/rustcQ6zxzl/symbols.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.0.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.1.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.10.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.11.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.12.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.13.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.14.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.15.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.2.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.3.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.4.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.5.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.6.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.7.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.8.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.9.rcgu.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.556n1a3yip9mca1c.rcgu.o" "-Wl,--as-needed" "-L" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/deps" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-05737cf45bd30456.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-9f873b61fdec9b03.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-7f13930fcac1846f.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-098633b847612f3b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-f14b73d282b0245e.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-2c5b4433ebc1d822.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-59591a7b405fe395.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-384947c6d5f697ff.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-b08a86c6880b47a8.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-58adeee671f9ba8e.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-f156b880fc73e7f0.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-4458c5022988e1ab.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-02e61e5ec4aa9e8b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-a0d9b33b5161957b.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-04cec55a79224c36.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-3fb6d8496dc7d6a6.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-7d46c016841a97d4.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-a1f7b8b60464cc57.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-272ca28f0b8538d5.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,-plugin-opt=O3,-plugin-opt=mcpu=znver2" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs" "-flto" "-fuse-ld=lld"
      = note: ld.lld: error: /home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/proc-macro2-43ef730515044743/build_script_build-43ef730515044743.build_script_build.dc536bce-cgu.0.rcgu.o: Opaque pointers are only supported in -opaque-pointers mode (Producer: 'LLVM15.0.0-rust-1.65.0-stable' Reader: 'LLVM 14.0.6')
              clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
    
    
    error: could not compile `libc` due to previous error
    warning: build failed, waiting for other jobs to finish...
    error: could not compile `proc-macro2` due to previous error
    ==> ERROR: A failure occurred in build().
        Aborting...
    error: failed to build 'ouch-0.4.0-2':
    error: packages failed to build: ouch-0.4.0-2
    

    If in minimal working makepkg.conf file I change lld to mold as linker it show this:

    ouch-0.4.0-2: parsing pkg list...
    ==> Making package: ouch 0.4.0-2 (Sun 27 Nov 2022 04:58:23 PM CET)
    ==> Checking runtime dependencies...
    ==> Checking buildtime dependencies...
    ==> WARNING: Using existing $srcdir/ tree
    ==> Starting build()...
       Compiling libc v0.2.137
       Compiling pkg-config v0.3.26
       Compiling version_check v0.9.4
       Compiling proc-macro2 v1.0.47
       Compiling jobserver v0.1.25
       Compiling quote v1.0.21
       Compiling cc v1.0.77
       Compiling unicode-ident v1.0.5
       Compiling proc-macro-error-attr v1.0.4
       Compiling syn v1.0.103
       Compiling cfg-if v1.0.0
       Compiling proc-macro-error v1.0.4
       Compiling memchr v2.5.0
       Compiling heck v0.4.0
       Compiling os_str_bytes v6.4.1
       Compiling clap_lex v0.3.0
       Compiling atty v0.2.14
       Compiling once_cell v1.16.0
       Compiling zstd-sys v2.0.1+zstd.1.5.2
       Compiling strsim v0.10.0
       Compiling termcolor v1.1.3
       Compiling bitflags v1.3.2
       Compiling libz-sys v1.1.8
       Compiling crc32fast v1.3.2
       Compiling log v0.4.17
       Compiling bzip2-sys v0.1.11+1.0.8
       Compiling lzma-sys v0.1.20
       Compiling aho-corasick v0.7.20
       Compiling crossbeam-utils v0.8.14
       Compiling regex-syntax v0.6.28
       Compiling time-core v0.1.0
       Compiling roff v0.2.1
       Compiling zstd-safe v6.0.2+zstd.1.5.2
       Compiling libm v0.2.6
       Compiling time-macros v0.2.6
       Compiling regex v1.7.0
       Compiling lzzzz v1.0.4
       Compiling bstr v0.2.17
       Compiling itoa v1.0.4
       Compiling same-file v1.0.6
       Compiling fnv v1.0.7
       Compiling snap v1.1.0
       Compiling walkdir v2.3.2
       Compiling globset v0.4.9
       Compiling time v0.3.17
       Compiling flate2 v1.0.24
       Compiling thread_local v1.1.4
       Compiling filetime v0.2.18
       Compiling xattr v0.2.3
       Compiling byteorder v1.4.3
       Compiling remove_dir_all v0.5.3
       Compiling fastrand v1.8.0
       Compiling lazy_static v1.4.0
       Compiling tempfile v3.3.0
       Compiling ignore v0.4.18
       Compiling zip v0.6.3
       Compiling tar v0.4.38
       Compiling humansize v2.1.2
       Compiling xz2 v0.1.7
       Compiling bzip2 v0.4.3
       Compiling fs-err v2.9.0
       Compiling linked-hash-map v0.5.6
       Compiling clap_derive v4.0.21
       Compiling clap v4.0.26
       Compiling zstd v0.12.0+zstd.1.5.2
       Compiling clap_mangen v0.2.4
       Compiling clap_complete v4.0.5
       Compiling ouch v0.4.0 (/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0)
    error: linking with `clang` failed: exit status: 1
      |
      = note: "clang" "-m64" "/tmp/rustcKQbaix/symbols.o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/deps/ouch-cb258462d5648994.ouch.f0ea18ee-cgu.0.rcgu.o" "-Wl,--as-needed" "-L" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/deps" "-L" "/usr/lib" "-L" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/lzzzz-d72b66cda64e95a1/out" "-L" "/usr/lib" "-L" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/build/zstd-sys-e1c1221461652295/out" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/rustcKQbaix/libzstd_sys-85864afbf3f6cc4b.rlib" "/tmp/rustcKQbaix/liblzzzz-38cf55931ba46463.rlib" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-272ca28f0b8538d5.rlib" "-Wl,-Bdynamic" "-llzma" "-lbz2" "-lz" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/roland/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/roland/.cache/paru/clone/ouch/src/ouch-0.4.0/target/release/deps/ouch-cb258462d5648994" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs" "-fuse-ld=mold"
      = note: mold: fatal: debug.o: don't know how to handle this LTO object file because no -plugin option was given. Please make sure you added -flto not only for creating object files but also for creating the final executable.
              clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
    
    
    error: could not compile `ouch` due to previous error
    ==> ERROR: A failure occurred in build().
        Aborting...
    error: failed to build 'ouch-0.4.0-2':
    error: packages failed to build: ouch-0.4.0-2
    

    For every build I deleted ouch AUR folder from paru (app that download and build aplication from AUR) and deleted ~/.cargo/registry to be sure it's all clean every time.

    Current Behavior

    No response

    Expected Behavior

    No response

    Additional Information

    No response

    bug 
    opened by roland-rollo 4
  • Allow archive formats to be used in the middle of a compression chain

    Allow archive formats to be used in the middle of a compression chain

    Currently, Ouch only supports archive formats at the start of the chain.

    x.tar
    x.tar.gz
    x.zip
    x.zip.bz.xz.sz
    

    It is a weird use case, but Ouch should be able to handle archives in such formats with the archive at the middle or the end:

    x.gz.tar.gz
    x.gz.tar
    

    For compressing, decompressing and listing.

    enhancement 
    opened by marcospb19 0
Releases(0.4.0)
  • 0.4.0(Nov 23, 2022)

    After 100+ PRs and 326 commits from 15 contributors, here's a summary for 0.4.0!

    Packaging Ouch

    If your package was broken by this release, or you want more info about packaging Ouch, check this page.

    Highlights of this release

    • More than 15 bug fixes (including major bugs).
    • New accessible mode.
    • Added list command.
    • Added support for .lz4 and .sz (snappy).
    • Infer file type while decompressing via MIME types.
    • New flags to ignore hidden files and .gitignore'd files when compressing.
    • Flag -o/--output was renamed to -d/--dir.

    Contributors

    Many thanks to all who contributed to Ouch!

    Here's a non-exhaustive list of people who contributed to this release:

    Also, thanks to those who helped with packaging and issue reporting.

    More changes

    Other than the highlighted features, here are more 33 PRs with changes:

    • Fix short flag for the --dir flag by @marcospb19 in https://github.com/ouch-org/ouch/pull/149
    • Fix typo by @marcospb19 in https://github.com/ouch-org/ouch/pull/176
    • Improve zip errors when paths are not utf8 valid by @marcospb19 in https://github.com/ouch-org/ouch/pull/181
    • Fix error message panic when cannot list non-archive files by @marcospb19 in https://github.com/ouch-org/ouch/pull/182
    • add supported formats to help message by @figsoda in https://github.com/ouch-org/ouch/pull/189
    • Fix not overwriting files/dirs when trying to create a dir by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/190
    • add link to github to help message by @figsoda in https://github.com/ouch-org/ouch/pull/191
    • Fix error with format infer by @marcospb19 in https://github.com/ouch-org/ouch/pull/205
    • Skip compressing file if its the same file as the output by @sigmaSd in https://github.com/ouch-org/ouch/pull/193
    • Fix zip memory warnings by @Crypto-Spartan in https://github.com/ouch-org/ouch/pull/217
    • Fix the hint suggestion for compressing multiple files by @Crypto-Spartan in https://github.com/ouch-org/ouch/pull/219
    • Ignore broken symlinks when compressing by @sigmaSd in https://github.com/ouch-org/ouch/pull/224
    • simple eprintln fixes by @Crypto-Spartan in https://github.com/ouch-org/ouch/pull/226
    • Actually use relative paths when extracting by @sigmaSd in https://github.com/ouch-org/ouch/pull/229
    • Mark directories when compressing to zip regardless of their contents by @sigmaSd in https://github.com/ouch-org/ouch/pull/230
    • Make yes, no, and accessible flags global by @LovecraftianHorror in https://github.com/ouch-org/ouch/pull/236
    • feat: recover last modified time when unpacking zip archives by @vrmiguel in https://github.com/ouch-org/ouch/pull/250
    • fix warning for zip with additional formats by @Crypto-Spartan in https://github.com/ouch-org/ouch/pull/239
    • Fix the decompress -d argument description by @hivehand in https://github.com/ouch-org/ouch/pull/265
    • Fix wrong filename suggestions when compressing folders into non-archives by @vrmiguel in https://github.com/ouch-org/ouch/pull/269
    • fix: incorrect warnings for decompression by @figsoda in https://github.com/ouch-org/ouch/pull/270
    • fix: respect file permissions when compressing zip files by @figsoda in https://github.com/ouch-org/ouch/pull/271
    • Generate man pages with clap_mangen by @figsoda in https://github.com/ouch-org/ouch/pull/273
    • Show subcommand aliases on --help by @marcospb19 in https://github.com/ouch-org/ouch/pull/275
    • Warn user if file extension is passed as file name by @marcospb19 in https://github.com/ouch-org/ouch/pull/277
    • Check for errors when setting the last modified time by @marcospb19 in https://github.com/ouch-org/ouch/pull/278
    • set last modified time during zip compression by @figsoda in https://github.com/ouch-org/ouch/pull/279
    • fix infinite compression if output file is inside the input folder by @figsoda in https://github.com/ouch-org/ouch/pull/288
    • Fix not overwriting a folder when compressing by @marcospb19 in https://github.com/ouch-org/ouch/pull/295
    • fix error message when compressing zip archive by @marcospb19 in https://github.com/ouch-org/ouch/pull/299
    • Fix fatal error if read fails when compressing by @marcospb19 in https://github.com/ouch-org/ouch/pull/297
    • Improve error message when compressing folder with single-file formats by @marcospb19 in https://github.com/ouch-org/ouch/pull/303
    • Check for EOF when asking questions by @marcospb19 in https://github.com/ouch-org/ouch/pull/311

    PRs made for optimization, testing, refactoring, and documentation are not listed.

    Regressed feature during development

    This version was supposed to feature a progress bar with estimated time left and throughput data (MBs/s), unfortunately, it couldn't be shipped in this version because it introduced a couple of bugs.

    We agreed to regress the progress bar until we could fix all these issues.

    Full changelog

    GitHub Diff: https://github.com/ouch-org/ouch/compare/0.3.1...0.4.0 CHANGELOG.md file: https://github.com/ouch-org/ouch/blob/main/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    ouch-aarch64-unknown-linux-gnu.tar.gz(1.46 MB)
    ouch-aarch64-unknown-linux-musl.tar.gz(1.52 MB)
    ouch-armv7-unknown-linux-gnueabihf.tar.gz(1.42 MB)
    ouch-armv7-unknown-linux-musleabihf.tar.gz(1.46 MB)
    ouch-x86_64-apple-darwin.tar.gz(1.20 MB)
    ouch-x86_64-pc-windows-gnu.zip(1.52 MB)
    ouch-x86_64-pc-windows-msvc.zip(1.34 MB)
    ouch-x86_64-unknown-linux-gnu.tar.gz(1.41 MB)
    ouch-x86_64-unknown-linux-musl.tar.gz(1.55 MB)
  • 0.3.0(Nov 2, 2021)

    With 125 commits from 10 contributors in the last 28 days, here is 0.3.0!

    Thanks for all the people who contributed!

    Main features:

    • Shell completions!
    • Man pages!
    • Huge error messages improvements
      • With details and hints to help you fix them, when possible.
    • Essential bug fixes.
    • Better argparsing library.
    • 7 different .tar format aliases are now supported.

    Disclaimer

    Our installation script does not support installing man pages and shell completions yet, but PRs are welcome!

    New Contributors

    • @figsoda made their first contribution in https://github.com/ouch-org/ouch/pull/86
    • @dcariotti made their first contribution in https://github.com/ouch-org/ouch/pull/84
    • @SpyrosRoum made their first contribution in https://github.com/ouch-org/ouch/pull/97
    • @dnaka91 made their first contribution in https://github.com/ouch-org/ouch/pull/101
    • @exoego made their first contribution in https://github.com/ouch-org/ouch/pull/109
    • @AntonHermann made their first contribution in https://github.com/ouch-org/ouch/pull/124
    • @khubo made their first contribution in https://github.com/ouch-org/ouch/pull/118

    Full Changelog: https://github.com/ouch-org/ouch/compare/0.2.0...0.3.0

    All PRs:

    • CI: fix macOS executable paths by @vrmiguel in https://github.com/ouch-org/ouch/pull/69
    • test: check the resulting compressed files through MIME types by @vrmiguel in https://github.com/ouch-org/ouch/pull/74
    • CI: don't upload unused artifacts by @marcospb19 in https://github.com/ouch-org/ouch/pull/75
    • Check if a folder is being compressed to a non-archive format by @vrmiguel in https://github.com/ouch-org/ouch/pull/79
    • CI: bump VM's Ubuntu version to 20 by @vrmiguel in https://github.com/ouch-org/ouch/pull/81
    • CI: stop building for ARM and Windows MinGW by @vrmiguel in https://github.com/ouch-org/ouch/pull/82
    • Apply clippy lints and small refactors by @figsoda in https://github.com/ouch-org/ouch/pull/86
    • Extension: add support for tgz by @figsoda in https://github.com/ouch-org/ouch/pull/85
    • Print the format type when the format is in an incorrent position by @dcariotti in https://github.com/ouch-org/ouch/pull/84
    • Fix single format compression by @marcospb19 in https://github.com/ouch-org/ouch/pull/89
    • Fix single file decompression with specified output directory by @figsoda in https://github.com/ouch-org/ouch/pull/93
    • Updating Cargo.lock to newer dependencies by @marcospb19 in https://github.com/ouch-org/ouch/pull/92
    • refactor: better NO_COLOR support by @figsoda in https://github.com/ouch-org/ouch/pull/95
    • Create CONTRIBUTING.md by @marcospb19 in https://github.com/ouch-org/ouch/pull/98
    • Change FinalError builder pattern to take and give ownership of self by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/97
    • Add proper error handling for conflicting flags by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/99
    • Properly detect if we are compressing a partially compressed file by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/91
    • Add support for short tar archive extensions by @dnaka91 in https://github.com/ouch-org/ouch/pull/101
    • Minor cleanups and refactors by @figsoda in https://github.com/ouch-org/ouch/pull/100
    • Readme revision by @marcospb19 in https://github.com/ouch-org/ouch/pull/102
    • Fix README small markdown error by @marcospb19 in https://github.com/ouch-org/ouch/pull/104
    • Escaping pipes in installation commands by @marcospb19 in https://github.com/ouch-org/ouch/pull/106
    • Omit "./" at the start of the path by @exoego in https://github.com/ouch-org/ouch/pull/109
    • add repology badge by @figsoda in https://github.com/ouch-org/ouch/pull/113
    • Use a same term as in command by @exoego in https://github.com/ouch-org/ouch/pull/117
    • Change message when decompressing in current directory by @exoego in https://github.com/ouch-org/ouch/pull/119
    • refactoring: Extract function by @exoego in https://github.com/ouch-org/ouch/pull/116
    • Migrate from oof to clap by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/108
    • Introduce new type for policy on how to handle overwrite questions by @AntonHermann in https://github.com/ouch-org/ouch/pull/124
    • Check the format with Github Action by @dcariotti in https://github.com/ouch-org/ouch/pull/126
    • Introduce fs_err as a replacement for fs by @GabrielSimonetto in https://github.com/ouch-org/ouch/pull/94
    • change output flag to dir flag by @khubo in https://github.com/ouch-org/ouch/pull/118
    • Fix archive detection by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/125
    • Updating CONTRIBUTING.md by @marcospb19 in https://github.com/ouch-org/ouch/pull/132
    • Generate shell completions and man page by @figsoda in https://github.com/ouch-org/ouch/pull/122
    • Print number of unpacked files by @dcariotti in https://github.com/ouch-org/ouch/pull/130
    • Add Missing docs by @GabrielSimonetto in https://github.com/ouch-org/ouch/pull/128
    • rewrite ci by @figsoda in https://github.com/ouch-org/ouch/pull/135
    • Remove tar combinations from compression format by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/133
    • Simplify cli canonicalize implementation by @marcospb19 in https://github.com/ouch-org/ouch/pull/139
    • Improving error messages and removing dead error treatment code by @marcospb19 in https://github.com/ouch-org/ouch/pull/140
    • Fix decompression overwritting files without asking and failing on directories by @SpyrosRoum in https://github.com/ouch-org/ouch/pull/141
    Source code(tar.gz)
    Source code(zip)
    ouch-x86_64-apple-darwin(1.19 MB)
    ouch-x86_64-linux-musl(1.66 MB)
    ouch-x86_64-pc-windows-msvc.exe(1.94 MB)
  • 0.2.0(Oct 6, 2021)

  • 0.1.6(Sep 25, 2021)

  • 0.1.4(Mar 29, 2021)

Owner
Vinícius Miguel
barely passed the Turing test
Vinícius Miguel
libbz2 (bzip2 compression) bindings for Rust

bzip2 Documentation A streaming compression/decompression library for rust with bindings to libbz2. # Cargo.toml [dependencies] bzip2 = "0.4" License

Alex Crichton 67 Dec 27, 2022
A Rust implementation of the Zopfli compression algorithm.

Zopfli in Rust This is a reimplementation of the Zopfli compression tool in Rust. I have totally ignored zopflipng. More info about why and how I did

Carol (Nichols || Goulding) 76 Oct 20, 2022
gzp - Multi-threaded Compression

gzp - Multi-threaded Compression

Seth 123 Dec 28, 2022
Like pigz, but rust - a cross platform, fast, compression and decompression tool.

?? crabz Like pigz, but rust. A cross platform, fast, compression and decompression tool. Synopsis This is currently a proof of concept CLI tool using

Seth 232 Jan 2, 2023
Fastest Snappy compression library in Node.js

snappy !!! For [email protected] and below, please go to node-snappy. More background about the 6-7 changes, please read this, Thanks @kesla . ?? Help me to

LongYinan 103 Jan 2, 2023
Michael's Compression Algorithm

mca This repository contains a compression algorithm written by me (Michael Grigoryan). The algorithm is only able to compress and decompress text fil

Michael Grigoryan 1 Dec 19, 2022
A reimplementation of the Zopfli compression tool in Rust.

Zopfli in Rust This is a reimplementation of the Zopfli compression tool in Rust. Carol Nichols started the Rust implementation as an experiment in in

null 11 Dec 26, 2022
lzlib (lzip compression) bindings for Rust

lzip Documentation A streaming compression/decompression library for rust with bindings to lzlib. # Cargo.toml [dependencies] lzip = "0.1" License Lic

Firas Khalil Khana 8 Sep 20, 2022
Obvious Unified Compression Helper is a CLI tool to help you compress and decompress files of several formats

Ouch! ouch stands for Obvious Unified Compression Helper and is a CLI tool to help you compress and decompress files of several formats. Features Usag

null 734 Dec 30, 2022
Basic (and naïve) LZW and Huffman compression algorithms in Rust.

Naive implementation of the LZW and Huffman compression algorithms. To run, install the Rust toolchain. Cargo may be used to compile the source. Examp

Luiz Felipe Gonçalves 9 May 22, 2023
Tar file reading/writing for Rust

tar-rs Documentation A tar archive reading/writing library for Rust. # Cargo.toml [dependencies] tar = "0.4" Reading an archive extern crate tar; use

Alex Crichton 490 Dec 30, 2022
A utility that can download JavaScript and TypeScript module graphs and store them locally in a special zip file.

eszip A utility that can download JavaScript and TypeScript module graphs and store them locally in a special zip file. To create a new archive: > esz

Deno Land 162 Dec 24, 2022
📦 Unpack deep archive files recursively over a file tree or a folder

deep-unpack Unpack deep archive files recursively over a file tree or a folder. Usage [dependencies] deep-unpack = { version = "0.1.2" } Usage fn main

null 3 Dec 4, 2022
Zopfli Compression Algorithm is a compression library programmed in C to perform very good, but slow, deflate or zlib compression.

Zopfli Compression Algorithm is a compression library programmed in C to perform very good, but slow, deflate or zlib compression.

Google 3.2k Jan 6, 2023
Generate short, memorable phrases for throw-away names.

Generates three-word phrases of the form intensifier-adjective-noun, just like GitHub default repo names.

null 6 Dec 25, 2021
👀Little program I made in 🦀Rust that reminds me every 20 minutes to look away from my computer 🖥screen.

?? eye break Little program I made in ?? Rust that reminds me every 20 minutes to look away from my computer ?? screen. I stay way too long on the com

Goldy 3 Apr 9, 2023
🌽 A simple and pain-free configuration language.

?? Corn A simple and pain-free configuration language. Corn has been designed using inspiration from JSON and Nix to produce a language that's easy an

Jake Stanger 3 Nov 28, 2022
Maniplate `&'static str` (e.g., `concat!`, `format!`) in Rust without pain!

static_str_ops The static_str_ops crate solves a longstanding issue about how to perform non-const string operations, e.g., format!(), concat!(), etc.

null 3 Aug 16, 2023
Sero is a web server that allows you to easily host your static sites without pain. The idea was inspired by surge.sh but gives you full control.

sero Lightning-fast, static web publishing with zero configuration and full control ?? Table Of Contents ?? Table Of Contents ?? Tools ❓ About The Pro

Dmitry Miasnenko 6 Nov 13, 2023
A simple command line program to upload file or directory to web3.storage with optional encryption and compression

w3s-cli A simple command line program to upload file or directory to web3.storage with optional encryption and compression. Features Uploads single fi

qdwang 5 Oct 22, 2022