先上代码:
#!/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 。
- Command+空格调出 Spotlight 输入 shortcuts。
- 单击左侧 Quick Action,并新建一个 Quick Action 。
- Receive Any 的 Any 只选择 Files。
- If there’s no inputu, 选择 Ask For 。
- 右侧搜索模块 Run Shell Script,并拖动到左侧。
- shell 的内容填写
for f in "$@" do cd "${f%/*}" tzextract "$f" done
- Shell 选择默认 zsh
- Input 选择默认 Shortcut input
- Pass Input 选择 as arguments
- Run as Administrator 保持默认,不选择。
- 右侧单击调整按钮(shortcut details)
- 勾选 Use as Quick Action 以及下面的 Finder
- 退出并重命名 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
支持我们
如果您喜欢这篇文章,您可以分享给您的朋友,分享到您的社交账号比如:
或者 点击这个链接 观看广告支持我【广告内容与我们无关,请不要轻易相信并打开弹出的广告】。
若您经济宽裕,更欢迎通过下面的方式小额赞助以支持我们的创作。