Uncompress files using CLI

I usually uncompress all kinds of packaged files from the command line. Unfortunately, I rarely remember which command line tool I should use for some specific packaging format. It is even more difficult to remember all the options needed for the appropriate tool.

Now that I found a cool hack in the ArchWiki, I never need to look for more information about how to uncompress a .tbz2, .tgz or .bz2 file -- I just use extract filename.

Add the following snippet of code to your .bashrc and you are ready to extract any file (if your system has the corresponding tool installed).


extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar xvJf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $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 "\`$1': unrecognized file compression" ;;
esac
else
echo "\`$1' is not a valid file"
fi
}

1 comment:

David A said...

If I may suggest some improvements?

1) Surround all instances of $1 with double quotes (as done in the ArchWiki-version) so it can handle file names with spaces in them.

2) Rename the function to a less generic name. One problem with unix is that all command line programs have to live together in a common crowded name space. A practical naming scheme is to prefix the name with parts of the authors name, or parts of the name of the package where it belongs. (E.g. gnome-terminal, mhwaveedit, oocalc). Maybe something like "myextract" (by relation) or "miextract" (by name). All my home-made scripts begins with "da" or "my".

3) To keep the .bashrc small and clean you can change the shell-function into a shell-script stored in the folder ~/bin. Every little thing in its own little file.