Backup com a ferramenta tar

Publicado por Perfil removido (última atualização em 26/12/2018)

[ Hits: 739 ]

Download 6930.backup.sh

Download 1545143383.backup.sh (versão 2)

Download 1545414558.backup.sh (versão 3)




Cria backups utilizando a ferramenta tar, que usado para armazenar vários arquivos em um único, preservando informações como datas e permissões. Este script também remove backups antigos criados pelo mesmo, de acordo com o valor definido na variável "time_until_old_backups_are_deleted=3" em dias.  

O nome dos arquivos a serem feito o backup deve ser especificado na variável $FILES e a variável $BACKUP_DIR é necessária para informar qual o diretório raiz onde todos os arquivos($FILES) estão.

  



Versões atualizadas deste script

Versão 2 - Enviado por erick Darko em 18/12/2018

Changelog: O nome dos arquivos a serem feito o backup deve ser especificado na variável $F e a variável $BACKUP_DIR é necessária para informar qual o diretório raiz onde todos os arquivos($F) estão.
Os arquivos podem ficar em qualquer diretório em $HOME
Apenas usuários normais (que não são root) podem executar o script

Download 1545143383.backup.sh


Versão 3 - Enviado por erick Darko em 21/12/2018

Changelog: add cabeçalho

Download 1545414558.backup.sh


Esconder código-fonte

#!/usr/bin/env bash
SECONDS=0 # -> runtime
trap quit 2

# Setup 
FILES=(
   "Documents Development .config/i3* .bashrc .vim/vimrc .xinitrc"            # <-- change it to your files
)
BACKUP_DIR="/home/$USER/" # Where the $FILES are

############################################################
f="backup_$(date +%H%M_%y%m%d).tar" # the backup.tar file name. Do not change it !
echo -e "\n$(date)" > ${log_path}${f::-4}.log
{ for i in {0..80};do echo -n '-' ;done ; echo; } >> ${log_path}${f::-4}.log

log_path="$(find $HOME -name .backup_logs -type d )"
if [ -z "$log_path" ];then
   mkdir $HOME/.backup_logs/; echo "creating .backup_logs/ folder in $HOME."
   log_path="$HOME/.backup_logs/" 
else
   log_path="${log_path}/"
fi

c=0
for i in $FILES;do
   BACKUP_PATH[$c]="/home/$USER/"$i 
   c=$((c+1))
done

echo "files/folders: ${BACKUP_PATH[@]}" >> ${log_path}${f::-4}.log
{ for i in {0..80};do echo -n '-' ;done ; echo; } >> ${log_path}${f::-4}.log

old_backups=($(find $BACKUP_DIR -name "backup_*_*.tar*" -type f -printf '%f\n'))
time_until_old_backups_are_deleted=3 # days
for i in ${old_backups[@]};do
   id=$(echo $i | grep -o -P '(?<=.)[0-9]+(?=\.)' | tr -d [:space:])
   echo "ID:$id $i" >> ${log_path}${f::-4}.log
   y="${id:0:2}"   # cut -c1-2 >> year
   if [ "${id:2:1}" -le 9 ];then
      if [ "${id:2:1}" -eq 1 -a $(date +%m) -ge 10 ];then
            m="${id:2:2}" # cut -c3-4 >> month
         d="${id:4}"
      else
         m="${id:2:1}" # cut -c3
         d=$(echo ${id:3} | tr -d [:blank:])
      fi
   fi
   if [ $y -eq $(date +%y) ];then
      if [ $(date +%d) -ge $((d+time_until_old_backups_are_deleted)) -a $m -le $(date +%m) ];then
         rm -vf $i >> ${log_path}${f::-4}.log
      fi
   else
      if [ $(date +%d) -eq $time_until_old_backups_are_deleted -a $(date +%m) -eq 1 ];then
         rm -vf $i >> ${log_path}${f::-4}.log
      fi
   fi
done
{ for i in {0..80};do echo -n '-' ;done ; echo; } >> ${log_path}${f::-4}.log

quit(){
   echo ; read -n1 -p "Are you sure you want to leave? [y/n]" answer ; echo 
   answer=${answer,,}
   if [ "${answer:0:1}" == "y" -o ${#answer} -eq 0 ];then
      rm -vi ${BACKUP_DIR}$f
      cat ${log_path}${f::-4}.log ; rm -v ${log_path}${f::-4}.log
      exit 0
   fi
}

_HELP_(){
   script_path=$(find $HOME -name backup.sh -user 1000)
   if [ -z "$script_path" ];then echo "script not found"; else echo "Source: $script_path" ;fi
   echo -e """Usage: ./backup
\nCreates backups using the tar tool, which is used to store multiple files in a single file,
preserving information such as dates and permissions. 
This script also removes old backups created by it, according to the value 
defined in the variable: \"time_until_old_backups_are_deleted = 3\" in days.
The name of the files to be backed up must be specified in the \$FILES variable
and the \$BACKUP_DIR variable and necessary to inform the root directory where
 all files in (\$FILES) are.

by erickDarko 2018
"""
   
   exit 0
}

case $1 in
   -h) _HELP_ ;;
    *) tar cf ${BACKUP_DIR}$f ${BACKUP_PATH[@]} ;;
esac

echo "Size: $(du -sh ${BACKUP_DIR}$f)" >> ${log_path}${f::-4}.log
if [ $? -ne 0 ];then rm -vi ${BACKUP_DIR}$f ;fi

ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec"
echo $ELAPSED >> ${log_path}${f::-4}.log

Scripts recomendados

Restauração de backup Firebird a partir de um arquivo .7Z contendo um GBK

Script de backup - rar

Backup de uma base MYSQL específica.

rotate.sh - Rotaciona arquivos de acordo com a data

Fazendo backup durante a semana em pastas distintas, equivalentes ao dia da semana


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts