問題背景
Linux下經常需要解壓文件,直接在命令行敲命令解壓是最便捷的。
但問題在於,不同的壓縮格式,需要用不同命令和不同參數,完全記不住啊。
解決方式
既然記不住,那就換一種思路,假如有一條命令能解壓所有文件,那就只需要記住這一條了。似乎可以寫個腳本來處理,上網一搜,果然這么現實的需求早就有人想過並實現了。
看起來作者也是從別處學到的,就不繼續溯源了。思路就是寫個腳本來處理,如下
原文在 https://ynome.wordpress.com/2013/04/14/linux-通用解壓/
#寫入.bashrc或.zshrc
ex () {
if [[ -z “$1” ]] ; then
print -P “usage: \e[1;36mex\e[1;0m < filename >”
print -P ” Extract the file specified based on the extension”
elif [[ -f $1 ]] ; then
case $1 in
*.tar.bz2) tar xjfv $1 ;;
*.tar.gz) tar xzfv $1 ;;
*.bz2) bunzip2v $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.xz) xz -d $1 ;;
*.7z) 7z x $1 ;;
*) echo “‘$1’ cannot be extracted via extract()” ;;
esac
else
echo “‘$1’ is not a valid file”
fi
}
將上述腳本,直接寫到.bashrc中即可。
后續想要解壓某個文件,直接執行ex+文件名即可。如果碰到不支持的,那搜索一下,加入此腳本,后面也就支持了。
我的修改
我為了方便管理,是單獨建立了一個.autoex.sh,並在.bashrc中加了
. ~/.autoex.sh
后面了解到,tar命令支持自動檢測類型,於是把原腳本中tar系列的命令的參數,都改成了xvf.
ex () {
if [[ -z “$1” ]] ; then
print -P “usage: \e[1;36mex\e[1;0m < filename >”
print -P ” Extract the file specified based on the extension”
elif [[ -f $1 ]] ; then
case $1 in
*.tar) tar xvf $1 ;;
*.tbz2) tar xvf $1 ;;
*.tgz) tar xvf $1 ;;
*.tar.bz2) tar xvf $1 ;;
*.tar.gz) tar xvf $1 ;;
*.tar.xz) tar xvf $1 ;;
*.tar.Z) tar xvf $1 ;;
*.bz2) bunzip2v $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.xz) xz -d $1 ;;
*.lzo) lzo -dv $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo “‘$1’ is not a valid file”
fi
}
其他
用了兩年了,確實方便。但也有需要注意的,那就是,這個腳本是靠后綴名來區分文件的,要是碰到不靠譜的壓縮文件制作者,搞錯后綴名,就可能搞不定了。
這個時候,可以用file命令查看下文件類型,再對症下葯。
實在不行,就用xdg-open命令用GUI程序打開試試(xdg-open的介紹:https://www.cnblogs.com/zqb-all/p/10666474.html)。
目前腳本在我放到github上維護了,本文的腳本內容可能不是最新的,可查看 https://github.com/zqb-all/git-dot-files/blob/master/.autoex.sh
