#!/bin/sh # extract -- extract any archive format set -eu if [ -z "${1:-}" ]; then echo "Usage: extract [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