This was the extract function I posted earlier in the cli thread, it just got longer, and I thought I'd make it its own script, so it doesn't clutter the bashrc.
It requires unp, but as pids said, you can unpack pretty much anything with tar xvf (excepts zips and maybe rars?).
Code: Select all
#!/bin/bash
# fclean
clean() {
mv "$1" `echo $1 | tr ' ' '_' | tr -d '[{}(),\!]' | tr -d "\'" | tr '[A-Z]' '[a-z]' | sed 's/\([0-9][0-9]\)-/\1_/'`
echo $1 | tr ' ' '_' | tr -d '[{}(),\!]' | tr -d "\'" | tr '[A-Z]' '[a-z]' | sed 's/\([0-9][0-9]\)-/\1_/'
}
case $1 in
*.tar.bz3) EXT=.tar.bz2 && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.tar.gz) EXT=.tar.gz && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.tar.xz) EXT=.tar.xz && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.bz2) EXT=.bz2 && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.rar) EXT=.rar && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.gz) EXT=.gz && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.tar) EXT=.tar && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.tbz2) EXT=.tbz2 && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.tgz) EXT=.tgz && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.zip) EXT=.zip && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.Z) EXT=.Z && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*.7z) EXT=.7z && ARCHIVE=`clean "$1"` && DIR=${ARCHIVE%$EXT};;
*) echo "'$1' is not a valid file!" && exit 0;;
esac
echo
# unpack
mkdir $DIR
mv $ARCHIVE $DIR
cd $DIR
unp $ARCHIVE
echo
# remove archive?
read -p "Remove archive (y/n)? " ANS
case $ANS in
[Yy]) rm $ARCHIVE && echo Archive removed.;;
[Nn]) echo Not removing.;;
esac
echo Done.