先上程式碼:

#!/bin/sh

# ================================================================
#    _____         _      _            _____
#   |_   _|       | |    ( )          /  __ \  https://tnl.casa
#     | |   _ __  | |    |/  ___      | /  \/  __ _  ___   __ _
#     | |  | '_ \ | |       / __|     | |     / _` |/ __| / _` |
#     | |  | | | || |____   \__ \     | \__/\| (_| |\__ \| (_| |
#     \_/  |_| |_|\_____/   |___/      \____/ \__,_||___/ \__,_|
# ================================================================

# Extract all files to the subdir named as same as file base name of the current dir.
if [ $# != 1 ]; then
    printf 'I need a single argument, the name of the archive to extract\n'
    exit 1
fi

target="${1%.*}"
# removes the .* extension, with no regard for anything else (so foo.zip becomes foo, and ~/foo.zip becomes ~/foo)

target="${target##*/}"
# removes anything up to the last /, so ~/foo becomes foo.
# This means that the function extracts any .zip file to a directory named after it, in the current directory.

if [ -d "${target}" ] ; then
    printf 'Same directory %s exist, exit.\n' "${target}"
    exit 2
elif [ -f "${target}" ] ; then
    printf 'Same file %s exist, exit.\n' "${target}"
    exit 3
# else
    # mkdir -p "${target}"
fi

# if unar is installed, use unar to extract.
if command -v unar > /dev/null 2>&1; then
    case $1 in
        *.tar|*.bz2|*.xz|*.gz|*.tgz|*.Z|*.zip|*.rar|*.7z)
            printf 'unar version: '
            unar -v || break
            unar -o "${target}" "$1"
            ;;
        *)
            printf 'Unkonw File Type\n'
            exit 4
            ;;
    esac
else
    case $1 in
        *.tar)
            mkdir -p "${target}"
            tar xvf "$1" -C "${target}"
            ;;
        *.tar.bz2)
            mkdir -p "${target}"
            tar xjvf "$1" -C "${target}"
            ;;
        *.bz2)
            mkdir -p "${target}"
            bunzip2 -c "$1" > "${target}"/"${target}"
            ;;
        *.tar.xz)
            mkdir -p "${target}"
            tar xJvf "$1" -C "${target}"
            ;;
        *.xz)
            mkdir -p "${target}"
            unxz -c "$1" > "${target}"/"${target}"
            ;;
        *.tgz|*.tar.gz)
            mkdir -p "${target}"
            tar xzvf "$1" -C "${target}"
            ;;
        *.gz)
            mkdir -p "${target}"
            gunzip -c "$1" > "${target}"/"${target}"
            ;;
        *.tar.Z)
            mkdir -p "${target}"
            tar xZvf "$1" -C "${target}"
            ;;
        *.Z)
            mkdir -p "${target}"
            uncompress -c "$1" > "${target}"/"${target}"
            ;;
        *.zip)
            unzip "$1" -d "${target}"
            ;;
        *.rar)
            mkdir -p "${target}"
            unrar x "$1" "${target}"
            ;;
        *.7z)
            7zz x "$1" -o"${target}"    # if installed p7zip instead of 7zip, change 7zz to 7z.
            ;;
        *)
            printf 'Unkonw File Type\n'
            exit 5
            ;;
    esac

fi

將上面程式碼新增到一個檔案中(比如 tzexctact),給這個檔案增加可執行許可權,並移動到 /usr/local/bin 下。

使用方法 1

執行

tzextract 壓縮檔名

即可將壓縮檔案解壓縮到當前目錄下的與壓縮檔案同名目錄中。

使用方法 2

在.zshrc 中新增如下語句:

alias -s  gz='tzextract'
alias -s tgz='tzextract'
alias -s   Z='tzextract'
alias -s zip='tzextract'
alias -s bz2='tzextract'
alias -s rar='tzextract'
alias -s  7z='tzextract'

即可在終端直接輸入壓縮檔案檔名,回車後, 將壓縮檔案解壓縮到當前目錄下的與壓縮檔案同名目錄中。

使用方法 3

建立一個 shortcuts 。

  1. Command+空格調出 Spotlight 輸入 shortcuts。
  2. 單擊左側 Quick Action,並新建一個 Quick Action 。
  3. Receive Any 的 Any 只選擇 Files。
  4. If there’s no inputu, 選擇 Ask For 。
  5. 右側搜尋模組 Run Shell Script,並拖動到左側。
  6. shell 的內容填寫
       for f in "[email protected]"
       do
       	cd "${f%/*}"
       	tzextract "$f"
       done
    
  7. Shell 選擇預設 zsh
  8. Input 選擇預設 Shortcut input
  9. Pass Input 選擇 as arguments
  10. Run as Administrator 保持預設,不選擇。
  11. 右側單擊調整按鈕(shortcut details)
  12. 勾選 Use as Quick Action 以及下面的 Finder
  13. 退出並重命名 ExtractFiles 。

之後可以檔案上右鍵選擇 Quick Actions 下的 ExtracrtFiles. 將壓縮檔案解壓縮到當前目錄下的與壓縮檔案同名目錄中。

老張說:

注意如果解壓縮 7z,rar 檔案還需要安裝 unrar 和 7z 。

7z 可以透過 homebrew 來安裝。

brew install 7-zip

rar 也可以使用 homebrew 安裝。

brew install rar

但是並不建議這樣做,因為這裡麵包含了全部 rar 壓縮工具。 WinRAR 官方提供了 rar 壓縮與解壓縮的命令列工具。 壓縮工具為試用版收費軟體,解壓縮工具(unrar)為免費軟體,而我們只需要解壓縮工具。 unrar 可以到 winrar 官方網站下載。 下載完成後將 unrar 解壓縮到 /usr/local/bin 目錄下即可。或者執行:

# 先 cd 到 unrar 所在目錄。
install -b -c ./unrar /usr/local/bin

如果解壓縮 xz 檔案,還需要安裝 xz 。

brew install xz

如果嫌上面安裝 3 個軟體太繁瑣, 也可以只安裝一個程式 “unar” 。 unar 也是一款開源的解壓縮命令列工具,支援的解壓縮檔案格式非常之多。 而且據說對於非 unicode 編碼檔案支援度也很好。

brew install unar

支援我們

如果您喜欢这篇文章,您可以分享给您的朋友,分享到您的社交账号比如:

或者 点击这个链接 观看广告支持我【广告内容与我们无关,请不要轻易相信并打开弹出的广告】。
若您经济宽裕,更欢迎通过下面的方式小额赞助以支持我们的创作。