先上代码:

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

支持我们

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

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