Skip to content

Instantly share code, notes, and snippets.

@rstriquer
Last active September 21, 2018 12:43
Show Gist options
  • Save rstriquer/4f3bda933e85cd7f703797149aa45770 to your computer and use it in GitHub Desktop.
Save rstriquer/4f3bda933e85cd7f703797149aa45770 to your computer and use it in GitHub Desktop.
simple bash backup script
#!/bin/bash
# Format: UTF8
PATH=/usr/local/bin/:/usr/bin/:/bin/:$PATH
ajuda() {
echo "Faz backup do Usuario"
echo
echo "Exemplo de uso: "
echo " "`basename $0`" go"
echo
echo "Parametros suportados:"
echo " --help) Apresenta este help"
echo " --daily) Executa o backup diario de alguns arquivos"
echo " --backup-full) Executa o backup do sistema de arquivos em um HD externo"
echo " --restore-full) Restaura o sistema de arquivos de um HD externo"
echo " --restore-from-desktop) Restaura o sistema de arquivos de um desktop externo"
}
if [ "$1" = "" ]; then
ajuda;
exit;
fi
ARGS=$(getopt -s bash --options x --longoptions help,daily,zip,backup-full,restore-from-desktop,restore-full -q -- "$@" )
eval set -- "$ARGS"
while true; do
# echo $1" "$2
case "$1" in
--help)
ajuda;
exit;
;;
--daily)
exec="daily";
from=$HOME;
to=$(pwd);
break;
;;
--restore-from-desktop)
exec="restore-from-desktop";
from=$HOME;
to=$(pwd);
break;
;;
--zip)
exec="zip";
from=$HOME;
to=$(pwd);
break;
;;
--backup-full)
exec="backup-full";
from=$HOME;
to=$(pwd);
break;
;;
--restore-full)
exec="restore-full";
from=$(pwd);
to=$HOME;
break;
;;
--break) ;;
esac
shift;
done
if [ -z $exec ]; then
echo "ERRO: Necessario informar o comando de execucao";
ajuda
exit;
fi
shopt -s dotglob
if [ "$exec" = "daily" ]; then
# echo "From: $from";
# echo "To: $to";
cd $HOME
if [ ! -d "backup" ]; then
mkdir backup
fi
if [ ! -w "backup" ]; then
exit "diretorio ~/backup esta com problema de escrita"
fi
cd backup
echo -n "Backups antigos excluidos: " >> /tmp/backup-temp.log
FILES=`ls -1`
OLDER=`ls -1t | head -n30 | tail -n1`
for FILE in $FILES; do
if [ $FILE -ot $OLDER ]; then
echo -n $FILE" "
# rm -rf $FILE
fi
done
echo " "
curdate=$(date +%Y%m%d%H%M)
if [ ! -d "$curdate" ]; then
mkdir $curdate
fi
if [ ! -w "$curdate" ]; then
exit "diretorio ~/backup/"$curdate" esta com problema de escrita"
fi
cd $curdate
cp -a $HOME/Documents/WB4B/tarefas.odb .
cp -a $HOME/\.local/share/rhythmbox/playlists.xml .
cp -a $HOME/\.mysql/workbench .
echo "Backup $curdate executado com sucesso"
exit
fi
if [ "$exec" = "restore-from-desktop" ]; then
ORIGEMHOST=192.168.0.9
SENHA='Desir33'
sudo scp ricardo@$ORIGEMHOST:/etc/hosts /etc/hosts
scp ricardo@$ORIGEMHOST:/home/ricardo/.mysql/workbench/wb_options.xml ~/.mysql/workbench/wb_options.xml
scp ricardo@$ORIGEMHOST:/home/ricardo/.mysql/workbench/connections.xml ~/.mysql/workbench/connections.xml
scp ricardo@$ORIGEMHOST:/home/ricardo/.local/share/rhythmbox/playlists.xml ~/.local/share/rhythmbox/playlists.xml
mkdir ~/.ssh
chmod 700 ~/.ssh
scp -R ricardo@$ORIGEMHOST:/home/ricardo/.ssh/* ~/.ssh
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/Documents ~/ >> ~/evolucao-backup.log
echo "Documentos"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/Downloads ~/ >> ~/evolucao-backup.log
echo "Downloads"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/src ~/ >> ~/evolucao-backup.log
echo "src"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/apps ~/ >> ~/evolucao-backup.log
echo "apps"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/Music ~/ >> ~/evolucao-backup.log
echo "Music"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/Pictures ~/ >> ~/evolucao-backup.log
echo "Pictures"
rsync -azvv -e "ssh -i /home/ricardo/.ssh/git_ricardo" ricardo@$ORIGEMHOST:/home/ricardo/Videos ~/ >> ~/evolucao-backup.log
echo "Videos"
exit
fi
if [ "$exec" = "restore-full" ]; then
sudo add-apt-repository ppa:webupd8team/atom
sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" >> /etc/apt/sources.list.d/virtualbox.list'
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install git qgit rhythmbox mysql-workbench atom skype nautilus-dropbox \
lynx wget nmap zip unzip terminator meld chromium-browser rdesktop teamviewer \
shutter darktable filezilla xmind virtualbox-5.0 \
inkscape
cd $to
mkdir .ssh
cd $to/.ssh
rsync -av $from/.ssh/* .
dir=Downloads
cd $to/$dir
rsync -av $from/$dir/* .
dir=Documentsq
cd $to/$dir
rsync -av $from/$dir/* .
dir=Pictures
cd $to/$dir
rsync -av $from/$dir/* .
dir=Videos
cd $to/$dir
rsync -av $from/$dir/* .
dir=Music
cd $to/$dir
rsync -av $from/$dir/* .
dir=iMacros
cd $to/$dir
rsync -av $from/$dir/* .
chmod -R 777 $to/src
fi
if [ "$exec" = "backup-full" ]; then
cd $to
if [ ! -e $USER ]; then
mkdir $USER
fi
if [ ! -d $USER ]; then
echo "Existe um arquivo com o nome do usuario ($USER) e nao e um diretorio";
echo "Nao e possivel executar a copia. Parando a execucao";
exit;
fi
cd $USER
echo -n "Copiando arquivos do usuario \"$USER\" para ";
pwd
rsync -av $from/* .
fi
if [ "$exec" = "zip" ]; then
curdate=$(date +%Y%m%d%H%M)
tolog=$to/$USER.$curdate.log
to=$to/$USER.$curdate.tar.gz
echo "Copiar arquivos do usuario \"$USER\" para $to";
read -r -p "Deseja cancelar o Deploy? [Y/N/n] " response
if [ "$response" != "Y" ]; then
echo
echo "Backup CANCELADO!"
echo
exit
fi
echo
echo -n "Inicio da operacao: " >> $tolog 2>&1
date >> $tolog 2>&1
echo "Copiando arquivos do usuario \"$USER\" para $to" >> $tolog 2>&1;
nohup nice -10 tar -czf $to $from >> $tolog 2>&1
echo -n "Fim da operacao: " >> $tolog 2>&1
date >> $tolog 2>&1
fi
#!/bin/bash
# Format: UTF8
# Sometimes there are some strange names which can generate a filesystem inconsistency if not
# corrected, therefore this script can be used to find files with those filename inconsistensies
PATH=/usr/local/bin/:/usr/bin/:/bin/:$PATH
find . -type f > filenames
while read filename; do
stripped="$(printf '%s\n' "$filename" | tr -d -C '[[:alnum:]][[:space:]][[:punct:]]')"
test "$filename" = "$stripped" || printf '%s\n' "$filename";
done < filenames
mysqldump \
otrs2 \
--host=192.168.0.100 \
--user=root \
--password=479fWAwzquCUU4Ky \
--skip-lock-tables `# nao travar a tabela (gera um backup não consistente)` \
--skip-comments `#evita adicinar informações extras como nome do servidor, versão do mysqldump e etc` \
--disable-keys `# desliga chaves no retorno do backup deixando o restore mais rapido` \
--quick `#com isto o mysql não gera um buffer e depois facaa o stream deste, ele faz um stream de linha a linha` \
--extended-insert `# Resulta em um arquivo menor e mais rapido para carga sendo um insert extendido (mais de uma linha da tabela inserida por comando insert)` \
--hex-blob `#transforma valores binarios em hexa (for example, 'abc' becomes 0x616263)` \
--insert-ignore \
--set-charset \
>> $1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment