Backup com a ferramenta tar

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

[ Hits: 2.880 ]

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

Script de Backup para MariaDB

Renomear múltiplos arquivos

Replicação de arquivos

Backup, Recuperação e Chroot

Backup do PostgreSQL 8.3 e aviso por e-mail


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts