# < FUNCTIONS ## BACKUP function etcbackup() { BACKUPDIR=$HOME/dropbox/backup HOSTNAME=$(hostname) FILE=$1 if [ -f $FILE ] then FILENAME=$(echo $FILE | sed 's/\///' | sed 's/\//_/g') cp -v $FILE $BACKUPDIR/$HOSTNAME/$FILENAME else echo $FILE does not exist fi } ## DOTFILES function update_dot() { for i in $HOME/dropbox/dot/[a-zA-Z]*; do if [ -f $i ]; then echo file $i base=`basename $i` dst=$HOME/.$base bak=$HOME/.${base}_bak case $base in vimrc|zshrc|*tgz) echo nothing $i ;; *) if [ -L $dst ]; then rm $dst else mv $dst $bak fi ln -s $i $dst ;; esac else if [ -d $i ]; then echo dir $i base=`basename $i | sed 's/_/\//'` dst=$HOME/.$base bak=$HOME/.${base}_bak case $base in "vim") echo nothing $i ;; *) if [ -e $dst ]; then if [ -L $dst ]; then rm $dst else mv $dst $bak fi fi ln -s $i $dst ;; esac else echo unknown $i fi fi done } ## PDF/LATEX function mkpdf() { pdflatex -shell-escape $1 # latex --output-format=pdf $1 name=`echo $1 | sed 's/.tex//'` EXT=(aux log) for i in $EXT; do rm -v $name.$i done } function gsmerge() { target=$1 echo "target: $target" sleep 1 shift /usr/bin/gs \ -sDEVICE=pdfwrite \ -dCompatibilityLevel=1.4 \ -dNOPAUSE \ -dBATCH \ -sPAPERSIZE=a4 \ -sOUTPUTFILE=$target $* } function gsmerge_medium() { target=$1 echo "target: $target" sleep 1 shift /usr/bin/gs \ -sDEVICE=pdfwrite \ -dPDFSETTINGS=/ebook \ -dCompatibilityLevel=1.4 \ -dNOPAUSE \ -dBATCH \ -sPAPERSIZE=a4 \ -sOutputFile=$target $* } ## USABILITY function lvim() { noglob vim $(echo $1 | awk -F":" '{ print $1" +"$2 }' ) } function mkcd() { mkdir $1 cd $1 } function cpwd() { pwd >! /tmp/pwd } function ppwd() { cd "`cat /tmp/pwd`" } function cp2wd() { cp $@ "`cat /tmp/pwd`" } function cpmk() { DIR=${*: -1} [ ! -d $DIR ] && mkdir -p $DIR cp $* } cpmd5(){ md5sum $1|cut -d ' ' -f 1|cpx } function publish() { [ -f $1 ] || return DIR=`dirname $1` FILE=`basename $1` mute pushd $DIR scp $FILE pool:public_html/ echo "http://www-pool.math.tu-berlin.de/~runge/$FILE" echo "http://www-pool.math.tu-berlin.de/~runge/$FILE"|cpx mute popd } function incognichrome { chromium --incognito exit } function inproxychrome { chromium --incognito --proxy-server=apu-serve:8123 exit } ## ZSH refresh() { source $HOME/.zshrc } ## compress stuff tar_tgz() { tar cvfz $1.tgz $1 } tar_tbz() { tar cvfj $1.tbz $1 } tar_tlz() { tar --lzma -cvf $1.tlz $1 } tar_xz() { tar cvfJ $1.tar.xz $1 } #Decompress any given compressed file ex() { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xvjf $1 ;; *.tar.gz) tar xvzf $1 ;; *.bz2) bunzip2 $1 ;; *.deb) ar vx $1 ;; *.rar) unrar x $1 ;; *.pgp) gpg -o ${1%".pgp"} -d $1 ;; *.gpg) gpg -o ${1%".gpg"} -d $1 ;; *.gz) gunzip $1 ;; *.tar) tar xvf $1 ;; *.tbz2) tar xvjf $1 ;; *.tgz) tar xvzf $1 ;; *.xz) tar xvJf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "don't know how to extract '$1'..." ;; esac else echo "'$1' is not a valid file!" fi } ex2() { if [ -f $2 ] ;then echo "Extracting to '$2'" local out = $2 else echo "Extracting to '$( pwd )'" local out = $( pwd ) fi if [ -f $1 ] ;then echo "'$1'" else echo "'$1' is not a valid file!" fi } ##CRYPTSETUP AND LUKS #TODO: Add possibility of opening/closing multiple devices at once lopen() { case $HOST in "homey") case $1 in "video-backup") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-SAMSUNG_HD153WI_S1UVJ1VZ400797" $1 ;; "video") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-SAMSUNG_HD153WI_S1UVJ1VZ400798" $1 ;; "photos") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-SAMSUNG_HD501LJ_S0MUJ1FQ104574" $1 ;; "music") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-SAMSUNG_HD501LJ_S0MUJ1FPB87663" $1 ;; "music-external") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST9500325AS_6VE152RS" $1 ;; "photos-external") sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST9500325AS_6VE457TN" $1 ;; esac ;; "dvzrv" | "trvlr" | "apu-serve") case $1 in "music") if [ -L "/dev/disk/by-uuid/e0b19c7d-9e90-4117-aea1-7e4b321d9d5a" ]; then sudo cryptsetup luksOpen "/dev/disk/by-uuid/e0b19c7d-9e90-4117-aea1-7e4b321d9d5a" $1 elif [ -L "/dev/disk/by-id/ata-ST9500325AS_6VE152RS" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST9500325AS_6VE152RS" $1 elif [ -L "/dev/disk/by-id/usb-Seagate_FreeAgent_Go_2GE36KXD-0:0" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/usb-Seagate_FreeAgent_Go_2GE36KXD-0:0" $1 else echo "Error! Device $1 is not available" return 1 fi ;; "photos") if [ -L "/dev/disk/by-uuid/b3c5a842-474b-4c2f-a246-abebe1da3450" ]; then sudo cryptsetup luksOpen "/dev/disk/by-uuid/b3c5a842-474b-4c2f-a246-abebe1da3450" $1 elif [ -L "/dev/disk/by-id/ata-ST9500325AS_6VE457TN " ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST9500325AS_6VE457TN" $1 elif [ -L "/dev/disk/by-id/usb-Seagate_FreeAgent_Go_2GE4LCR0-0:0" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/usb-Seagate_FreeAgent_Go_2GE4LCR0-0:0" $1 else echo "Error! Device $1 is not available" return 1 fi ;; "backup-audio") if [ -L "/dev/disk/by-id/usb-HGST_HTS_725050A7E630_801130168383-0:0" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/usb-HGST_HTS_725050A7E630_801130168383-0:0" $1 elif [ -L "/dev/disk/by-id/ata-HGST_HTS725050A7E630_TF755AWHHS9S1M" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-HGST_HTS725050A7E630_TF755AWHHS9S1M" $1 else echo "Error! Device $1 is not available" return 1 fi ;; "backup") if [ -L "/dev/disk/by-uuid/e003337a-33e9-4691-bc57-e77243e55de5" ];then sudo cryptsetup luksOpen "/dev/disk/by-uuid/e003337a-33e9-4691-bc57-e77243e55de5" $1 elif [ -L "/dev/disk/by-id/ata-ST9500420ASG_5VJ5TRWD" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST9500420ASG_5VJ5TRWD" $1 elif [ -L "/dev/disk/by-id/usb-ST950042_0ASG_55DFFFFFFFFF-0:0" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/usb-ST950042_0ASG_55DFFFFFFFFF-0:0" $1 else echo "Error! Device $1 is not available" return 1 fi ;; "media") if [ -L "/dev/disk/by-id/ata-ST4000LM016-1N2170_W80088G0" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST4000LM016-1N2170_W80088G0" $1 elif [ -L "/dev/disk/by-uuid/e5adbc14-732e-43e8-b6e1-febdfe6d1d3c" ]; then sudo cryptsetup luksOpen "/dev/disk/by-uuid/e5adbc14-732e-43e8-b6e1-febdfe6d1d3c" $1 else echo "Error! Device $1 is not available" return 1 fi ;; "video") if [ -L "/dev/disk/by-id/ata-ST4000LM016-1N2170_W80092WW" ]; then sudo cryptsetup luksOpen "/dev/disk/by-id/ata-ST4000LM016-1N2170_W80092WW" $1 elif [ -L "/dev/disk/by-uuid/5ac700be-e168-495b-b133-42064fa101e4" ]; then sudo cryptsetup luksOpen "/dev/disk/by-uuid/5ac700be-e168-495b-b133-42064fa101e4" $1 else echo "Error! Device $1 is not available" return 1 fi ;; *) echo "Error! Device $1 is not available" return 1 ;; esac esac if [[ -e "/dev/mapper/$1" ]]; then sudo mount /dev/mapper/$1 /mnt/$1 if [ $1 = "media" ]; then sudo mount --bind /mnt/media/music /mnt/music sudo mount --bind /mnt/media/photos /mnt/photos if [ ! -h ~/.cache/shotwell ]; then ln -s /mnt/photos/shotwell/ ~/.cache/shotwell fi fi else echo "Error: Device /dev/mapper/$1 is not available." return 1 fi } lclose() { notmounted=$(mountpoint /mnt/$1) if [ "$?" -eq 0 ]; then #stop services blocking the umount if [[ $HOST == "homey" ]]; then sudo systemctl stop rpc-{idmapd,mountd} rpcbind fi if [ $1 = "media" ]; then sudo umount /mnt/{music,photos} fi sudo umount /mnt/$1 sudo cryptsetup luksClose $1 #restart services that blocked the umount if [[ $HOST == "homey" ]]; then sudo systemctl start rpc-{idmapd,mountd} rpcbind fi else echo "/mnt/$1 is not a mountpoint or not mounted." return 1 fi } ## RSYNC backupinfo() { log_cyan "INFO" rsync\ -r\ -n\ -t\ -p\ -o\ -g\ -v\ --progress\ --delete\ --ignore-existing\ --size-only\ -s\ --exclude 'lost+found'\ --exclude '.Trash-1000'\ --exclude '$RECYCLEBIN'\ --exclude 'System Volume Information'\ --exclude '.thumbs'\ $1 $2 echo "backupfolder path/to/folder/ /path/to/other/folder" } backupfolder() { rsync \ -r\ -t\ -p\ -o\ -g\ -v\ --progress\ --delete --ignore-existing --size-only -s --exclude 'lost+found' --exclude '.Trash-1000' --exclude '$RECYCLEBIN' --exclude 'System Volume Information' --exclude '.thumbs' $1 $2 } # FUNCTIONS >