blog icon indicating copy to clipboard operation
blog copied to clipboard

Linux终端extract即解压功能

Open nkypy opened this issue 8 years ago • 0 comments

在终端下工作,有时需要使用解压功能,当然你可以使用xarchiver,ark等解压软件,但是对于依赖终端的各位来说更好的办法是shell里定义解压功能. 网上的sh,bash,zsh版本有很多,但是我google一圈之后发现没有fish shell 的版本,因此我根据bash版本修改为fish版本. 下面是bash或zsh版本.

# Archives
function extract {
    if [ -z "$1" ]; then
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
  else
    if [ -f $1 ]; then
      case $1 in
        *.tar.bz2)   tar xvjf $1    ;;
        *.tar.gz)    tar xvzf $1    ;;
        *.tar.xz)    tar xvJf $1    ;;
        *.lzma)      unlzma $1      ;;
        *.bz2)       bunzip2 $1     ;;
        *.rar)       unrar x -ad $1 ;;
        *.gz)        gunzip $1      ;;
        *.tar)       tar xvf $1     ;;
        *.tbz2)      tar xvjf $1    ;;
        *.tgz)       tar xvzf $1    ;;
        *.zip)       unzip $1       ;;
        *.Z)         uncompress $1  ;;
        *.7z)        7z x $1        ;;
        *.xz)        unxz $1        ;;
        *.exe)       cabextract $1  ;;
        *)           echo "extract: '$1' - unknown archive method" ;;
      esac
     else
      echo "$1 - file does not exist"
    fi
  fi
}
alias extr='extract '
function extract_and_remove {
  extract $1
  rm -f $1
}
alias extrr='extract_and_remove '

下面是我根据上面修改的fish的终端解压版本.

function extract
    if test -z $argv
        echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    else if test -f $argv
        switch $argv
            case "*.tar.bz2"
                tar xvjf $argv
            case "*.tar.gz"
                tar xvzf $argv
            case "*.tar.xz"
                tar xvJf $argv
            case "*.lzma"
                unlzma $argv
            case "*.bz2"
                bunzip2 $argv
            case "*.rar"
                unrar x -ad $argv
            case "*.gz"
                gunzip $argv
            case "*.tar"
                tar xvf $argv
            case "*.tbz2"
               tar xvjf $argv
            case "*.tgz"
                tar xvzf $argv
            case "*.zip"
                unzip $argv
            case "*.Z"
                uncompress $argv
            case "*.7z"
                7z x $argv
            case "*.xz"
                unxz $argv
            case "*.exe"
                cabextract $argv
            case "*"
                echo "extract: $argv - unknown archive method"
        end
    else
        echo "$argv - file does not exist"
    end
end

alias extr "extract "

function extract_and_remove
    extract $argv
    rm -f $argv
end

alias extrr "extract_and_remove "

方便依赖终端的各位使用.

nkypy avatar Jun 29 '16 10:06 nkypy