Do What I Mean Extractor
Find a file
Armin Friedl 53a15e5a7f
All checks were successful
continuous-integration/drone/push Build is passing
Determine log level dynamically
The log level can now be set by environment variable `XWIM_LOGLEVEL`.
Alternatively a default log level per build type (determined by NDEBUG flag) is
used.
2020-08-01 11:41:49 +02:00
doc Update README fix meson build 2020-08-01 00:35:34 +02:00
src Determine log level dynamically 2020-08-01 11:41:49 +02:00
subprojects Add tests 2020-02-25 23:01:41 +01:00
test Add tests 2020-02-25 23:01:41 +01:00
.clang-format Init 2020-02-16 03:20:12 +01:00
.drone.yml Add tests 2020-02-25 23:01:41 +01:00
.gitignore Update README fix meson build 2020-08-01 00:35:34 +02:00
meson.build Add tests 2020-02-25 23:01:41 +01:00
README.md Determine log level dynamically 2020-08-01 11:41:49 +02:00

Build Status

XWIM

Do What I Mean Extractor

https://xkcd.com/1168/

Continuing the emacs tradition of "Do What I Mean" tools, xwim is a replacement for the excellent, but unfortunately unmaintained, dtrx. xwim is a command line tool that targets two problems with archives:

  • Command line tools for extracting archives are often archaic and differ considerably between formats
  • Inconsiderately packaged archives tend to spill their content over the directory they are extracted to

Usage

Invoking xwim is as simple as:

xwim archive.tar.gz

This will extract the archive to the current folder. If the archive contains a single root folder it is just extracted as is. Otherwise xwim first creates a folder named after the archive and extracts the contents there.

Examples

Single root folder named after the archive

archive.tar.gz
|
-- archive/
    |
    -- file.txt
    |
    -- file2.txt

xwim will just extract the archive to the current directory.

Multiple files/folders in archive root

archive.tar.gz
|
-- archive/
|    |
|    -- file.txt
| 
-- file2.txt

xwim will create a folder archive in the current directory and extract the archive contents there.

Supported formats

xwim supports most formats supported by libarchive:

  • 7-zip: 7z, 7zip
  • zip: jar, zip
  • bzip2: bz2, bzip2
  • gzip: gz, gzip
  • xzip: xz
  • rar: rar
  • tar with compression: tgz, tar.gz, tar.bz2, tar.xz

Install

xwim is currently released as a dynamically linked glibc binary only. The releases can be downloaded from https://git.friedl.net/incubator/xwim/releases and should run on most glibc based GNU/Linux distributions. The following dependencies have to be installed:

Approaching the first stable release we will release for more platforms.

Build

xwim is built with meson. To compile xwim from source you need:

  • meson
  • ninja
  • GCC or Clang (others may work too) supporting C++17

Additionally you need some libraries installed:

# Get the source
git clone https://git.friedl.net/incubator/xwim.git

# Build xwim executable
cd xwim
meson build
cd build
meson compile

# Run executable on the test archive
# This will extract root.tar.gz to 
# the current working directory
src/xwim test/archives/root.tar.gz

Contributing

While xwim is still in incubator phase (i.e. before version 1.0) it's main repository is hosted on https://git.friedl.net/incubator/xwim with a mirror on https://github.com/arminfriedl/xwim. With the first stable release it will most likely move to GitHub as it's main repository.

If you want to contribute, you can either issue a pull request on it's Github mirror (will be cherry picked into the main repository) or send patches to dev[at]friedl[dot]net.

If you are interested in a long-term co-maintainership you can also drop me a mail for an account on https://git.friedl.net.