Skip to content

Instantly share code, notes, and snippets.

@huseyin
Last active October 7, 2015 21:11
Show Gist options
  • Save huseyin/2799ee3da7eaec4a4869 to your computer and use it in GitHub Desktop.
Save huseyin/2799ee3da7eaec4a4869 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
PARAM=$1
ARGFILE=""
FILENAME=""
EXTENSION=""
VERSION="0.0.1"
USAGE="untarball file(-f): No file selected
untarball Usage: untarball [option] [-f file] myfile"
HELPTEXT="$USAGE
---
Options(Basic):
-v, Print version.
-h, Print help text.
-a, Automatic argument report
-u, Print usage text
-c, Check packages
You can select one of them."
function _check_package() {
unxzdep=`dpkg-query -l | grep xz-utils | wc -l`
unbzipdep=`dpkg-query -l | grep bzip2 | wc -l`
unrardep=`dpkg-query -l | grep unrar | wc -l`
# Bağımlılıklar belirlendi. Sistemde kurulu olup olmadığına bakıldı.
# Paket bağımlılıkları sağlanmış ise durum pas geçilir.
# Eğer bağımlılıklar sağlanmamış ise sisteme kurulum gerçekleştirilir.
if [ ! $unxzdep -eq 0 ] && [ ! $unrardep -eq 0 ] && [ ! $unbzipdep -eq 0 ]
then
echo "Warning: packages -> OK"
else
echo -e "Packages not found! Install? (y/n): \c"
read
if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]
then
sudo apt-get install xz-utils
sudo apt-get install unrar
sudo apt-get install bzip2
else
echo "Warning: disallowing by [ $USER ]"
exit 1
fi
fi
}
function _parse_and_fargument() {
if [ -e $ARGFILE ]
then
tempext=(`echo $ARGFILE | tr '.' '\n'`)
if [ ${#tempext[@]} -eq 0 ]
then
echo "Error: no input!"
exit 1
fi
# Eğer dosya *.tar.gz veya *.tar.bz2 uzantılı bir dosya ise dosya
# uzantısı .gz veya .bz2 gibi bir karışıklığa yol açabilir.
# Örneğin dosya *.gz ile *.tar.gz uzantılı iki dosyanın da dosyanın
# uzantısı .gz olarak belirlenebilir. Bu problemcik birçok yoldan
# çözüme kavuşturulabilir.
# Örneğin;
# EXTENSION="${FILENAME#*.}"
# bunlardan bir tanesi olabilir. Ancak burada şu şekilde bir problem
# yaşanabilir. Dosya adı myarchive.sh.tar.gz şeklinde ise uzantı
# .sh.tar.gz şeklinde oluşturulur. Bu nedenle biraz ilkel bir yönteme
# başvurulmuştur. Veya pekala çözüm olan joker karakterlerin kullanımı.
# *.tar.bz2 zaten istediğimiz şey ama dediğim gibi joker karakter.
# Biz şu anda oyunu biraz daha kurallarına göre oynadık.
if [ "${tempext[-2]}" = "tar" ]
then
EXTENSION=".${tempext[-2]}.${tempext[-1]}"
else
EXTENSION=".${tempext[-1]}"
fi
FILENAME=`basename $ARGFILE $EXTENSION`
else
echo "Error: file not found!"
exit 1
fi
}
# Dosya uzantılarına göre arşivlerin dışarı çıkarılma fonksiyonları
# burada oluşturulmuştur.
function _tbz2() { tar xvjf $ARGFILE; }
function _tgz() { tar xvzf $ARGFILE; }
function _bz2() { bunzip2 $ARGFILE; }
function _tar() { tar xvf $ARGFILE; }
function _rar() { unrar x $ARGFILE; }
function _gz() { gunzip $ARGFILE; }
function _txz() { unxz $ARGFILE; }
# Programın ana bloğu burada yer almaktadır. Programcığın -a auto
# opsiyonuna -f opsiyonu bağlanmıştır. -V ve -O gibi opsiyonlar detay
# opsiyon olarak deneme aşamasındadır.
case $PARAM in
-v) echo "version: $VERSION";;
-h) echo "$HELPTEXT";;
-c) _check_package;;
-u) echo "$USAGE";;
-a) if [ "$2" = "-f" ]
then
ARGFILE=$3
_parse_and_fargument
echo "Extracting archive... [ $FILENAME ]"
case $EXTENSION in
.tar.bz2) _tbz2;;
.tbz2) _tbz2;;
.tar.gz) _tgz;;
.tar.xz) _txz;;
.tgz) _tgz;;
.tar) _tar;;
.bz2) _bz2;;
.rar) _rar;;
.zip) _zip;;
.gz) _gz;;
*) echo "Error: file extension is not recognized!"
exit 1;;
esac
else
echo "$HELPTEXT"
exit 1
fi ;;
*) echo "$HELPTEXT"
exit 1;;
esac
@huseyin
Copy link
Author

huseyin commented Aug 26, 2015

For example,

$ shc -v -r -T -f untarball.sh
$ ./untarball -a -f mytar.bz2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment