- if [[ $1 == --help ]]; then
- echo "$help"
- fi
- local x super
- for x in "$@"; do
- case "$x" in
- # tars first, so they are higher pri than non-tar extensions
- *.tar ) tar xf "$x" ;;
- *.tar.bz2 | *.tbz2 ) tar xjf "$x" ;;
- *.tar.gz | *.tgz ) tar xzf "$x" ;;
- *.tar.xz ) tar Jxf "$x" ;;
- *.xz) xz -d "$x" ;;
- *.7z ) 7za x "$x" ;;
- *.bz2 ) bunzip2 "$x" ;;
- *.deb )
- ar x "$x"
- tar Jxf data.tar.xz
- tar xzf control.tar.gz
- rm -f control.tar.gz
- rm -f data.tar.xz
+ local quiet=false
+ case $1 in
+ --help)
+ echo "$help"
+ return 0
+ ;;
+ -q)
+ quiet=true
+ shift
+ ;;
+ esac
+ local x super restore_nullglob f cmd
+ for x in "$@"; do
+ case "$x" in
+ # tars first, so they are higher pri than non-tar extensions
+ *.tar )
+ $quiet || echo tar xf "$x"
+ tar xf "$x"
+ ;;
+ *.tar.bz2 | *.tbz2 )
+ $quiet || echo tar xjf "$x"
+ tar xjf "$x"
+ ;;
+ *.tar.gz | *.tgz )
+ $quiet || echo tar xzf "$x"
+ tar xzf "$x"
+ ;;
+ *.tar.xz )
+ $quiet || echo tar Jxf "$x"
+ tar Jxf "$x"
+ ;;
+ *.tar.zst )
+ $quiet || echo tar -I unzstd -xf "$x"
+ tar -I unzstd -xf "$x"
+ ;;
+ *.zst )
+ $quiet || echo unzstd "$x"
+ unzstd "$x"
+ ;;
+ *.xz)
+ $quiet || echo pixz -d "$x"
+ pixz -d "$x"
+ ;;
+ *.7z )
+ if type -p 7za &>/dev/null; then
+ cmd=7za
+ else
+ cmd=7zr
+ fi
+ $quiet || echo 7zr x "$x"
+ $cmd x "$x"
+ ;;
+ *.bz2 )
+ $quiet || echo bunzip2 "$x"
+ bunzip2 "$x"
+ ;;
+ *.deb )
+ $quiet || echo ar x "$x"
+ ar x "$x"
+ restore_nullglob=false
+ if ! shopt -q nullglob; then
+ restore_nullglob=true
+ fi
+ tmp=(data.tar.* control.tar.*)
+ if $restore_nullglob; then
+ shopt -u nullglob
+ fi
+ if (( ${#tmp[@]} != 2 )); then
+ echo "error: could not find data.tar.* or control.tar.*" >&2
+ return 1
+ fi
+ for f in ${tmp[@]}; do
+ case $f in
+ *.xz)
+ $quiet || echo tar xJf $f
+ tar xJf $f
+ rm -f $f
+ ;;
+ *.zst)
+ $quiet || echo tar -I unzstd -xf $f
+ tar -I unzstd -xf $f
+ rm -f $f
+ ;;
+ *.gz)
+ $quiet || echo tar xzf $f
+ tar xzf $f
+ rm -f $f
+ ;;
+ *)
+ echo "ex: ERROR: file i didnt expect: $f"