#!/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