#!/bin/sh
# extract -- extract any archive format
set -eu

if [ -z "${1:-}" ]; then
    echo "Usage: extract <archive> [archive...]" >&2
    exit 1
fi

for f in "$@"; do
    if [ ! -f "$f" ]; then
        echo "Not a file: $f" >&2
        continue
    fi
    case "$f" in
        *.tar.bz2|*.tbz2)   tar xjf "$f" ;;
        *.tar.gz|*.tgz)     tar xzf "$f" ;;
        *.tar.xz|*.txz)     tar xJf "$f" ;;
        *.tar.zst)           tar --zstd -xf "$f" ;;
        *.tar)               tar xf "$f" ;;
        *.bz2)               bunzip2 "$f" ;;
        *.gz)                gunzip "$f" ;;
        *.xz)                xz -d "$f" ;;
        *.zst)               zstd -d "$f" ;;
        *.rar)               unrar x "$f" ;;
        *.zip)               unzip "$f" ;;
        *.7z)                7z x "$f" ;;
        *.Z)                 uncompress "$f" ;;
        *.lzma)              unlzma "$f" ;;
        *.deb)               ar x "$f" ;;
        *.rpm)               rpm2cpio "$f" | cpio -idmv ;;
        *)                   echo "Unknown format: $f" >&2 ;;
    esac
done
