jacknpoe

Script de Backup

Nov 19th, 2025 (edited)
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.63 KB | Software | 0 0
  1. #!/bin/bash
  2.  
  3. ######### script de backup das pastas importantes do usuário jacknpoe (+ páginas em htdocs) #########
  4.  
  5. # essa função faz echo e log ao mesmo tempo
  6. d_echo() {
  7.     local mensagem=$1
  8.  
  9.     # echo no terminal
  10.     echo "$mensagem"
  11.  
  12.     # log no arquivo
  13.     echo "$mensagem" >> "$log_arquivo"
  14. }
  15.  
  16. # essa função resume muita coisa para facilitar a cópia de pastas
  17. copia() {
  18.     local origem=$1
  19.  
  20.     # guarda o tempo inicial para cálculo da duração da cópia
  21.     tempo_ini_cp=$SECONDS
  22.  
  23.     # incrementa o número da cópia atual
  24.     copia_atual=$((copia_atual + 1))
  25.  
  26.     # separa somente o nome da pasta, ignorando o caminho
  27.     pasta=$(basename "$origem")
  28.  
  29.     # informa o início da cópia
  30.     d_echo "$copia_atual: copiando de \"$pasta\"..."
  31.  
  32.     # faz a cópia com rsync, sem links simbólicos
  33.     rsync -a --no-links "$origem" "$caminho_pasta" > /dev/null
  34.  
  35.     # esses espaços servem para alinhar a saída do script, dependendo do número da cópia atual
  36.     digitos=${#copia_atual}
  37.     tamanho=$(($digitos + 2))
  38.     espacos=$(printf "%0.s " $(seq 1 $tamanho))
  39.  
  40.     # Verifica o código de saída do comando rsync e atualiza os contadores de sucesso e falha
  41.     if [ $? -eq 0 ]; then
  42.         sucessos=$((sucessos + 1))
  43.         d_echo "$espacos(cópia de \"$pasta\" concluída com sucesso)"
  44.     else
  45.         falhas=$((falhas + 1))
  46.         d_echo "$espacos(falha na cópia de \"$pasta\")"
  47.     fi
  48.  
  49.     # calcula o tempo decorrido da cópia e informa
  50.     tempo_dec_cp=$((SECONDS - tempo_ini_cp))
  51.     d_echo "$espacos(tempo: $((tempo_dec_cp / 60)) minutos e $((tempo_dec_cp % 60)) segundos)" && d_echo
  52. }
  53.  
  54. # pega o nome da pasta do argumento, se houver
  55. nome_da_pasta=$1
  56.  
  57. # se faltar o nome da pasta como argumento, pede ao usuário
  58. if [[ -z "$nome_da_pasta" ]]; then
  59.     # pede o nome da pasta, senão será backup_AAAA_MM_DD_HH_MM_SS
  60.     read -p "Nome da pasta do backup (nada para 'backup_AAAA_MM_DD_HH_MM_SS'): " nome_da_pasta
  61. fi
  62.  
  63. # essas pastas são as maiores entre as candidatas a backup, que deve ser feito eventualmente
  64. # veja que não espera teclar enter, apenas teclar s ou outra tecla já continua
  65. read -n 1 -r -p "Copiar também 'do dropbox'? (s/n): " r_dropbox
  66. echo
  67.  
  68. read -n 1 -r -p "Copiar também 'Linguagens'? (s/n): " r_linguagens
  69. echo
  70.  
  71. read -n 1 -r -p "Copiar também 'Músicas'? (s/n): " r_musicas
  72. echo && echo
  73.  
  74. # guarda o tempo inicial para cálculo de duração do backup
  75. tempo_inicial=$SECONDS
  76.  
  77. # variável para encontrar qual é o número da pasta em copia()
  78. copia_atual=0
  79.  
  80. # variáveis que guardam sucessos e falhas
  81. sucessos=0
  82. falhas=0
  83.  
  84. # se o nome da pasta estiver vazio, cria um nome padrão backup_AAAA_MM_DD_HH_MM_SS
  85. if [[ -z "$nome_da_pasta" ]]; then
  86.     data_atual=$(date +'%Y_%m_%d_%H_%M_%S')
  87.     nome_da_pasta="backup_$data_atual"
  88. fi
  89. echo "Iniciando backup em: \"$nome_da_pasta\""
  90.  
  91. # monta o nome completo do caminha da pasta, para echo, criação de diretório e cópias
  92. caminho_pasta="/media/jacknpoe/115GB/$nome_da_pasta"
  93.  
  94. # cria a pasta de backup
  95. echo "Criando pasta de backup em: \"$caminho_pasta\"" && echo
  96. mkdir -p "$caminho_pasta"
  97.  
  98. # nome e caminho do arquivo de log do backup
  99. log_arquivo="$caminho_pasta/backup_log.txt"
  100.  
  101. # cabeçalho do arquivo de log
  102. echo "-------------------------------------------------------" >> "$log_arquivo"
  103. echo "Log do backup iniciado em: $(date)" >> "$log_arquivo"
  104. echo "-------------------------------------------------------" >> "$log_arquivo" && echo >> "$log_arquivo"
  105.  
  106. ###################### as cópias em si ##########################
  107.  
  108. copia "/home/jacknpoe/Documentos"
  109.  
  110. if [[ "$r_dropbox" == "s" ]]; then
  111.     copia "/home/jacknpoe/do dropbox"
  112. fi
  113.  
  114. copia "/home/jacknpoe/DOS"
  115.  
  116. copia "/home/jacknpoe/DownsWin"
  117.  
  118. copia "/home/jacknpoe/Vídeos/Gravações de tela"
  119.  
  120. copia "/opt/lampp/htdocs"
  121.  
  122. copia "/home/jacknpoe/Imagens"
  123.  
  124. copia "/home/jacknpoe/Juros"
  125.  
  126. if [[ "$r_linguagens" == "s" ]]; then
  127.     copia "/home/jacknpoe/Linguagens"
  128. fi
  129.  
  130. copia "/home/jacknpoe/Vídeos/locais"
  131.  
  132. if [[ "$r_musicas" == "s" ]]; then
  133.     copia "/home/jacknpoe/Músicas"
  134. fi
  135.  
  136. copia "/home/jacknpoe/Executáveis/scripts"
  137.  
  138. #################################################################
  139.  
  140. # calcula o tempo final e a duração do backup e mostra o tempo decorrido
  141. tempo_decorrido=$((SECONDS - tempo_inicial))
  142. d_echo "Tempo de execução: $((tempo_decorrido / 60)) minutos e $((tempo_decorrido % 60)) segundos."
  143.  
  144. # mostra o resumo final de sucessos e falhas
  145. d_echo "Backup finalizado com $sucessos cópias bem-sucedidas e $falhas falhas."
  146. echo >> "$log_arquivo"
  147.  
  148. # retorna 0 se não houve falhas, ou mais de 0 se houve falhas
  149. exit $falhas
  150.  
Advertisement
Add Comment
Please, Sign In to add comment