自己封裝Linux命令行萬能解壓命令

  • 2019 年 12 月 27 日
  • 筆記

問題背景

Linux下經常需要解壓文件,直接在命令行敲命令解壓是最便捷的。

但問題在於,不同的壓縮格式,需要用不同命令和不同參數,完全記不住啊。

解決方式

既然記不住,那就換一種思路,假如有一條命令能解壓所有文件,那就只需要記住這一條了。似乎可以寫個腳本來處理,上網一搜,果然這麼現實的需求早就有人想過並實現了。

看起來作者也是從別處學到的,就不繼續溯源了。思路就是寫個腳本來處理,如下

原文在 https://ynome.wordpress.com/2013/04/14/linux-%E9%80%9A%E7%94%A8%E8%A7%A3%E5%8E%8B/

    #寫入.bashrc或.zshrc      ex () {          if [[ -z 「$1」 ]] ; then                 print -P 「usage: e[1;36mexe[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;36mexe[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

本文地址:https://www.cnblogs.com/zqb-all/p/10854199.html