先上程式碼:
#!/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
支援我們
如果您喜欢这篇文章,您可以分享给您的朋友,分享到您的社交账号比如:
或者 点击这个链接 观看广告支持我【广告内容与我们无关,请不要轻易相信并打开弹出的广告】。
若您经济宽裕,更欢迎通过下面的方式小额赞助以支持我们的创作。