Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - #!/bin/bash
 - # Script desenvolvido por : hamacker <sirhamacker[em]gmail.com>
 - # Data : 14/Ago/2009
 - # Objetivo : Turbinar o backup e acabar com a necessidade de compactar
 - # pastas inteiras, compactando apenas os arquivos que h�
 - # na pasta e mantendo a estrutura original de pastas da
 - # unidade de origem.
 - # Uso : Faz backup de arquivos/pastas selecionadas para discos usb
 - # O importante neste script � a funcao do_copy que faz
 - # a c�pia de pastas selecionadas para a unidade de destino
 - # compactando-os com gzip apenas quando a extens�o do arquivo
 - # j� n�o for um arquivo compactado, por exemplo, n�o faz sentido
 - # compactar um arquivo jpeg, avi ou mp3, pois todos eles j� s�o
 - # arquivos compactados. O script tambem possui linhas de restri��o,
 - # isto �, a variavel LISTA_NAO_SALVAR contem extensoes de arquivos
 - # temporarios que n�o devem ser copiados.
 - # Al�m disso, o arquivo mant�m a mesma estrutura do que era na origem, ex:
 - # Original :
 - # /home/fulano/planilhas/compras.xls
 - # /home/fulano/textos/poesias/minha-esposa.doc
 - # /home/fulano/musicas/mp3/testando-minha-voz.mp3
 - # Ficar� assim na unidade de destino do backup (supondo que fosse em /media/usbdisk) :
 - # /media/usbdisk/home/fulano/planilhas/compras.xls.gz
 - # /media/usbdisk/home/fulano/textos/poesias/minha-esposa.doc.gz
 - # /media/usbdisk/home/fulano/musicas/mp3/testando-minha-voz.mp3
 - # Agora voce deve ter entendido o objetivo do script, fazer o backup de forma mais veloz
 - # e sem a necessidade de arquivos de logs que digam o que h� dentro de cada .zip ou .tar.gz
 - # como seria necessario se fosse compactar as pastas inteiras
 - # Modo de restaurar o backup :
 - # Os arquivos sao compactados com o gzip, assim basta usar um gunzip para descompacta-lo.
 - # Se voce quiser transformar os arquivos compactados em arquivos descompactaados
 - # de uma pasta/subpasta recursivamente, � s� executar:
 - # gunzip -r /local/da/pasta/onde/esta/o/backup
 - # e todos os arquivos que estiverem sido compactados com o gzip serao transformados em descompactados.
 - # Voce deve certificar-se antes de que o local onde estarao sendo transformados/descompactados tenha
 - # espa�o suficiente.
 - #
 - ############
 - # funcoes #
 - ############
 - function log() {
 - if [ -z "$1" ] ; then
 - echo "Parametro para log esta vazio"
 - return
 - fi
 - if [ -z "$backup_title" ] || [ "$backup_title" = "" ] ; then
 - backup_title="backup-`date +%Y-%m-%d`"
 - fi
 - if [ -z "$backup_file_log" ] || [ "$backup_file_log" = "" ] ; then
 - backup_file_log="/var/log/$backup_title.log"
 - fi
 - if ! [ -f "$backup_file_log" ] ; then
 - echo "Arquivo para registrar log [$backup_file_log] n�o existe !"
 - echo -ne "Criando um arquivo vazio..."
 - touch "$backup_file_log"
 - fi
 - echo "$1"
 - echo "$1" >>$backup_file_log
 - }
 - function do_remover_acentuacao {
 - RETURN_STRING=""
 - ORIGINAL_STRING="$1"
 - NEW_STRING=""
 - SUBST_CHAR="_"
 - ACCEPT_CHARS="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!-_=+(){}[]\\,./"
 - if [ -f "/usr/bin/unaccent" ] ; then
 - NEW_STRING=`/usr/bin/unaccent UTF-8 "$ORIGINAL_STRING"`
 - if [ -z "$NEW_STRING" ] || [ "$NEW_STRING" = "" ] ; then
 - NEW_STRING="$ORIGINAL_STRING"
 - fi
 - fi
 - LEN=${#NEW_STRING}
 - POS=0
 - while [ $POS -le $LEN ] ; do
 - CHAR="${NEW_STRING:$POS:1}"
 - if [[ "$ACCEPT_CHARS" =~ "$CHAR" ]] ; then
 - RETURN_STRING="$RETURN_STRING$CHAR"
 - else
 - RETURN_STRING="$RETURN_STRING$SUBST_CHAR"
 - fi
 - POS=$((POS+1))
 - done
 - NEW_LEN=${#RETURN_STRING}
 - if [ $LEN != $NEW_LEN ] ; then
 - RETURN_STRING="$ORIGINAL_STRING"
 - fi
 - }
 - function do_copy() {
 - # copia uma pasta de um local de origem
 - # para um local de destino
 - # Porem faz a compactacao para o destino
 - copiar_de_origem="$1"
 - copiar_para_destino="$2"
 - RESULT_VALUE="OK"
 - LISTA_NAO_COMPACTAR=".7z .ace .ain .alz .apz .ar .arc .ari .arj .ark .axx .b64 .ba .bh .boo .bz .bz2 .bzip \
 - .bzip2 .c00 .c01 .c02 .car .cbr .cbz .cp9 .cpgz .cpt .dar .dd .deb .dgc .dist .ecs .efw \
 - .fdp .gca .gz .gzi .gzip .ha .hbc .hbc2 .hbe .hki .hki1 .hki2 .hki3 .hpk .hyp .ice .ipg \
 - .ipk .ish .j .jgz .jic .kgb .lbr .lemon .lha .lnx .lqr .lzh .lzm .lzma .lzo .lzx .md .mint \
 - .mpkg .mzp .p7m .package .pae .pak .paq6 .paq7 .paq8 .par .par2 .pbi .pcv .pea .pf .pim .pit \
 - .piz .pkg .pup .pup .puz .pwa .qda .r00 .r01 .r02 .r03 .rar .rev .rk .rnc .rpm .rte .rz .rzs \
 - .s00 .s01 .s02 .s7z .sar .sdc .sdn .sea .sen .sfs .sfx .sh .shar .shk .shr .sit .sitx .spt \
 - .sqx .sqz .tar .taz .tbz .tbz2 .tg .tgz .tlz .tz .uc2 .uha .vsi .wad .war .wot .xef .xez \
 - .xpi .xx .y .yz .z .z01 .z02 .z03 .z04 .zap .zip .zipx .zix .zoo .zz .jpg .png .gif .cab .exe .avi .mpg .mp3 .mp2 .aac"
 - LISTA_NAO_SALVAR=".\$\$\$ .tmp .swp .lnk"
 - if [ "$copiar_de_origem" = "" ] ; then
 - log "Erro na copia de arquivos : O endereco de origem n�o foi informado."
 - return
 - fi
 - if [ "$copiar_para_destino" = "" ] ; then
 - log "Erro na copia de arquivos : O endereco de destino n�o foi informado."
 - return
 - fi
 - if ! [ -d "$copiar_para_destino" ] ; then
 - mkdir -p "$copiar_para_destino"
 - fi
 - # lendo todos os arquivos na pasta de origem e jogando para dentro de um arquivo temporario
 - temp=`mktemp`
 - find "$copiar_de_origem/" -type f >$temp
 - while read ARQ_ATUAL ; do
 - ARQ_ATUAL_PASTA=`dirname "$ARQ_ATUAL"`
 - NOME_ARQUIVO=`basename "$ARQ_ATUAL"`
 - # entao remover a acentuacao que houver no nome de arquivo
 - do_remover_acentuacao "$NOME_ARQUIVO"
 - NOME_ARQUIVO="$RETURN_STRING"
 - # Apenas nomes/extensoes de arquivos compactados em minusculo
 - NOME_ARQUIVO=`echo "$NOME_ARQUIVO" | tr [:upper:] [:lower:]`
 - NOME_ARQUIVO_EXT=${NOME_ARQUIVO#*.}
 - NOME_ARQUIVO_EXT=`echo "$NOME_ARQUIVO_EXT" | tr [:upper:] [:lower:]`
 - # remover a acentuacao que houver no nome da pasta
 - do_remover_acentuacao "$copiar_para_destino/$ARQ_ATUAL_PASTA"
 - NOVA_PASTA="$RETURN_STRING"
 - # trocando //mnt por /
 - NOVA_PASTA=${NOVA_PASTA//\/\/mnt/\/}
 - # trocando //media/ por /
 - NOVA_PASTA=${NOVA_PASTA//\/\/media/\/}
 - # As linhas a seguir vao determinar se havera compactacao ou se realmente
 - # � necessario fazer o backup de tal arquivo
 - COMPACTAR_ARQUIVO="S"
 - SALVAR_ARQUIVO="S"
 - # tratando arquivos que n�o devem ser salvos no backup
 - [[ "$LISTA_NAO_SALVAR" =~ "$NOME_ARQUIVO_EXT" ]] && SALVAR_ARQUIVO="N"
 - [[ "$ARQ_ATUAL" =~ "RECYCLER" ]] && SALVAR_ARQUIVO="N"
 - [ "$NOME_ARQUIVO" = "thumbs.db" ] && SALVAR_ARQUIVO="N"
 - # tratando de nomes de arquivos que n�o devem ser compactados
 - [ "$NOME_ARQUIVO" = "setup.exe" ] && COMPACTAR_ARQUIVO="N"
 - [ "$NOME_ARQUIVO" = "install.exe" ] && COMPACTAR_ARQUIVO="N"
 - [ "$NOME_ARQUIVO" = "instalar.exe" ] && COMPACTAR_ARQUIVO="N"
 - if [ "$SALVAR_ARQUIVO" = "S" ] ; then
 - ! [ -d "$NOVA_PASTA" ] && mkdir -p "$NOVA_PASTA"
 - [[ "$LISTA_NAO_COMPACTAR" =~ "$NOME_ARQUIVO_EXT" ]] && COMPACTAR_ARQUIVO="N"
 - if [ "$COMPACTAR_ARQUIVO" = "S" ] ; then
 - echo "[$NOME_ARQUIVO_EXT] transferindo [$ARQ_ATUAL] para [$NOVA_PASTA/$NOME_ARQUIVO.gz]"
 - gzip -c "$ARQ_ATUAL" >"$NOVA_PASTA/$NOME_ARQUIVO.gz"
 - if [ $? -ne 0 ] ; then
 - log "[backup-falhou] : erro ao copiar [$ARQ_ATUAL] para [$NOVA_PASTA/$NOME_ARQUIVO.gz]"
 - RESULT_VALUE="FALHOU"
 - fi
 - else
 - echo "[$NOME_ARQUIVO_EXT] transferindo [$ARQ_ATUAL] para [$NOVA_PASTA/$NOME_ARQUIVO]"
 - cp "$ARQ_ATUAL" "$NOVA_PASTA/$NOME_ARQUIVO"
 - if [ $? -ne 0 ] ; then
 - log "[backup-falhou] : erro ao copiar [$ARQ_ATUAL] para [$NOVA_PASTA/$NOME_ARQUIVO]"
 - RESULT_VALUE="FALHOU"
 - fi
 - fi
 - fi
 - done < $temp
 - [ -f "$temp" ] && rm -f "$temp"
 - }
 - function do_copy_7z() {
 - # copia uma pasta de um local de origem
 - # para um local de destino
 - # Porem faz a compactacao para o destino
 - copiar_de_origem="$1"
 - copiar_para_destino="$2"
 - if [ -z "$backup_title" ] || [ "$backup_title" = "" ] ; then
 - backup_title="backup-`date +%Y-%m-%d`"
 - fi
 - if [ -z "$backup_file_log" ] || [ "$backup_file_log" = "" ] ; then
 - backup_file_log="/var/log/$backup_title.log"
 - fi
 - RESULT_VALUE="FALHOU"
 - #### USANDO 7ZIP ####
 - COMPACTAR="/usr/bin/7z a -y -t7z -l -m0=lzma -mx=3 -mfb=64 -md=32m -ms=on -v100m "
 - COMPACTAR_EXT="7z"
 - COMPACTAR_CATALOGAR="/usr/bin/7z l "
 - if [ "$copiar_de_origem" = "" ] ; then
 - log "Erro na copia de arquivos : O endehttp://pastebin.com/f73e5457creco de origem n�o foi informado."
 - return
 - fi
 - if [ "$copiar_para_destino" = "" ] ; then
 - log "Erro na copia de arquivos : O endereco de destino n�o foi informado."
 - return
 - fi
 - if ! [ -d "$copiar_para_destino" ] ; then
 - mkdir -p "$copiar_para_destino"
 - fi
 - unset backup_lista_subpasta
 - TEMP_FILE=`mktemp`
 - find $copiar_de_origem/* -maxdepth 0 -type d >$TEMP_FILE
 - while read PASTA_ATUAL ; do
 - backup_lista_subpasta=( "${backup_lista_subpasta[@]}" "$PASTA_ATUAL" )
 - done < $TEMP_FILE
 - for copiar_de_origem in "${backup_lista_subpasta[@]}" ; do
 - # se tiver instalado o programa /usr/bin/unaccent entao removo o acento
 - # no nome do arquivo compactado
 - if [ -f "/usr/bin/unaccent" ] ; then
 - backup_file=`/usr/bin/unaccent UTF-8 "$copiar_de_origem"`
 - else
 - backup_file="$copiar_de_origem"
 - fi
 - # Apenas nomes compactados em minusculo
 - backup_file=`echo "$backup_file" | tr [:upper:] [:lower:]`
 - # trocando // por servidor_ (caso de a origem for um endereco smb //server/compartilhamento)
 - if [ "${backup_file:0:2}" = "//" ] ; then
 - backup_file=${copiar_de_origem//\/\//servidor_}
 - else
 - # removendo o primeiro "/" do endereco para compor o nome nome
 - if [ "${backup_file:0:1}" = "/" ] ; then
 - backup_file=${backup_file:1}
 - fi
 - fi
 - # trocando / por :
 - backup_file=${backup_file//\//:}
 - # trocando :mnt: por nada
 - backup_file=${backup_file//:mnt:/}
 - # trocando :media: por nada
 - backup_file=${backup_file//:media:/}
 - # trocando : por _
 - backup_file=${backup_file//:/_}
 - # acrescentando o caminho completo
 - backup_file="$copiar_para_destino/$backup_title-$backup_file.$COMPACTAR_EXT"
 - # instrucao para realizacao do backup, o algarismo "2" no final da linha
 - # ira redirecionar mensagens de erro (stderr) para o arquivo de log, aten��o que
 - # nem todos os compactadores enviam mensagens de erro para strerr, � o caso
 - # do programa zip
 - $COMPACTAR "$backup_file" "$copiar_de_origem" 2>>$backup_file_log
 - # verificando se ouve erro
 - if [ $? -ne 0 ] ; then
 - RESULT_VALUE="FALHOU"
 - log "Backup de [$copiar_de_origem] completado por�m com alguns erros, verifique o log para saber quais s�o."
 - else
 - log "Backup de [$copiar_de_origem] completado com sucesso."
 - RESULT_VALUE="OK"
 - fi
 - if [ -f "$backup_file" ] || [ -f "$backup_file.001" ] ; then
 - # Catalogando o arquivo de backup recem-criado
 - [ -f "$backup_file" ] && $COMPACTAR_CATALOGAR "$backup_file" >"$backup_file.txt"
 - [ -f "$backup_file.001" ] && $COMPACTAR_CATALOGAR "$backup_file.001" >"$backup_file.txt"
 - fi
 - done
 - }
 - ############################
 - # Inicio do Programa #
 - ############################
 - backup_title="backup-`date +%Y-%m-%d`"
 - backup_file_log="/var/log/$backup_title.log"
 - if ! [ -d "`dirname $backup_file_log`" ] ; then
 - mkdir -p "`dirname $backup_file_log`"
 - fi
 - # local de destino do backup
 - # se for uma unidade usb, nao esque�a de monta-la primeiro
 - destino="/media/disk"
 - # lista de pastas a serem backupeadas
 - # basta duplicar uma linha para acrescentar novas pastas
 - # para serem backupeadas
 - unset backup_lista
 - backup_lista=( "${backup_lista[@]}" "/home/fulano" )
 - backup_lista=( "${backup_lista[@]}" "/home/fulano/.ecryptfs" )
 - backup_lista=( "${backup_lista[@]}" "/home/fulano/.mozilla" )
 - backup_lista=( "${backup_lista[@]}" "/home/dados" )
 - backup_lista=( "${backup_lista[@]}" "/var/cache/apt/archives" )
 - # realizando o backup dos volumes alistados acima
 - # use do_copy para fazer o backup com compactacao individual de arquivos,
 - # ou use do_copy_7z para fazer o backup com compactacao por pastas
 - for origem in "${backup_lista[@]}" ; do
 - do_copy_7z "$origem" "$destino"
 - if [ "$RESULT_VALUE" != "OK" ] ; then
 - echo "Backup feito, por�m com falhas !"
 - else
 - echo "Backup feito com sucesso !"
 - fi
 - done
 - log "Se precisar consultar mensagens de erro, veja [$backup_file_log]."
 - exit 0;
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment