Armin Friedl
d9cbf47036
Compressed archives now contain a single root which consists of the file or folder being compressed. Before, the archive root contained the full relative path form the current working directory to the compressed file or folder. This is unintuitive in most cases and not dwim.
139 lines
3.8 KiB
Markdown
139 lines
3.8 KiB
Markdown
[![Build Status](https://drone.friedl.net/api/badges/incubator/xwim/status.svg)](https://drone.friedl.net/incubator/xwim)
|
|
|
|
# XWIM
|
|
Do What I Mean Extractor
|
|
|
|
![https://xkcd.com/1168/](https://imgs.xkcd.com/comics/tar.png)
|
|
|
|
Continuing the emacs tradition of "Do What I Mean" tools, xwim is a replacement
|
|
for the excellent, but unfortunately unmaintained,
|
|
[dtrx](https://github.com/brettcs/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:
|
|
|
|
```shell
|
|
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](https://libarchive.org/):
|
|
|
|
- 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:
|
|
- [spdlog](https://github.com/gabime/spdlog)
|
|
- [fmt](https://github.com/fmtlib/fmt)
|
|
- [libarchive](https://github.com/libarchive/libarchive)
|
|
|
|
Approaching the first stable release we will release for more platforms.
|
|
|
|
# Build
|
|
xwim is built with [meson](https://mesonbuild.com/). To compile xwim from source
|
|
you need:
|
|
- [meson](https://mesonbuild.com/)
|
|
- [ninja](https://ninja-build.org/)
|
|
- GCC or Clang (others may work too) supporting C++17
|
|
|
|
Additionally you need some libraries installed:
|
|
- [spdlog](https://github.com/gabime/spdlog)
|
|
- [fmt](https://github.com/fmtlib/fmt)
|
|
- [libarchive](https://github.com/libarchive/libarchive)
|
|
|
|
|
|
``` shell
|
|
# 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
|
|
```
|
|
|
|
# Configure
|
|
xwim strives to just do the right thing out of the box. Consequently, it does
|
|
not require any configuration. If you are unhappy with the defaults you can
|
|
change them though.
|
|
|
|
## Changing the log level
|
|
Per default xwim chooses an appropriate log level according to your build type
|
|
(debug/release builds). If you want to change the verbosity you can set the
|
|
`XWIM_LOGLEVEL` environment variable. Valid levels are:
|
|
- trace
|
|
- debug
|
|
- info
|
|
- warning
|
|
- error
|
|
- critical
|
|
- off
|
|
|
|
# Contributing
|
|
While xwim is still in incubator phase (i.e. before version 1.0) its 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 its main repository.
|
|
|
|
If you want to contribute, you can either issue a pull request on its 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.
|