tar ballが .gzだろうが.xzだろうが.zstだろうが解凍してやる!

TL;DR

#!/bin/bash

untar_by_file_type() {
  if [[ "$1" == "application/x-tar" ]]; then
    tar -xvf "$2" 
  elif [[ "$1" == "application/gzip" ]]; then
    tar -zxvf "$2" 
  elif [[ "$1" == "application/x-xz" ]]; then
    tar -Jxvf "$2" 
  elif [[ "$1" == "application/zstd" ]]; then
    tar --use-compress-program unzstd -xvf "$2"
  fi
}

untar() {
  if [[ "$1" == "" ]]; then
    echo "usage: untar <archive-filename>"
    exit 1
  fi
  untar_by_file_type "$(file -b --mime-type "$1")" "$1"
}

untar "$@"

パスの通ってるところに置くか、~/.zshrc やら ~/.bash_profileやらに関数を追記

解説

file -b --mime-type "$1"

fileコマンドでファイルの内容を推定。 --mime-typeオプションでmime-typeを表示するようにする。 -bオプションでファイル名非表示

untar_by_file_type() {
  if [[ "$1" == "application/x-tar" ]]; then
    tar -xvf "$2" 
  elif [[ "$1" == "application/gzip" ]]; then
    tar -zxvf "$2" 
  elif [[ "$1" == "application/x-xz" ]]; then
    tar -Jxvf "$2" 
  elif [[ "$1" == "application/zstd" ]]; then
    tar --use-compress-program unzstd -xvf "$2"
  fi
}

mime-typeに応じて解凍コマンドを実行

上から.tar,.tar.gz,.tar.xz,.tar.zst(d)