Extracting archives from the terminal easily
I often find my self downloading an archive from the terminal with some
obscure format for which I'm not quite sure what command to use for extraction.
# extract any time of compressed file
function extract {
    echo Extracting $1 ...
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)   tar xjf $1  ;;
            *.tar.gz)    tar xzf $1  ;;
            *.bz2)       bunzip2 $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  ;;
            *.7z)        7z x $1  ;;
            *)        echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}
I found this shell function somewhere a while ago. This single function has saved
me countless of google lookups. Just paste into your bash_profile or where you keep
your shell commands.
Then all you need to do is calling the function with any archive you may wish like so:
$ extract some_weird_archive.tbz2Written by Kristian Andersen
Related protips
4 Responses
You could easily condense all the tar commands to just
tar xvf <file.ext>
This works on tar.{bz2,xz,gzip,tbz2,tgz}
There is a tool for it
unp foo.extThere is also atool with aunpack command. Not only it handles different types, it also creates a directory for extracted files if there are more than one in the archive root.
There's an attributed, extended and improved version for zsh here: https://raw.github.com/robbyrussell/oh-my-zsh/master/plugins/extract/extract.plugin.zsh