[Ubuntu-BR] Alguem conhece algum programa de backup que comprima arquivos individualmente mantendo a estrutura original de diretorios ?

hamacker sirhamacker em gmail.com
Quinta Agosto 13 20:08:09 UTC 2009


Respondendo a mim mesmo, criei uma funcao em bash script para realizar
essa operação, se alguem tiver interesse é só copiar para seu script :
function do_copy() {
  # copia uma pasta de um local de origem
  # para um local de destino
  # Porem faz a compactacao para o destino se a extensao nao for a do
tipo ja compactada
  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"

  LISTA_NAO_SALVAR=".tmp .$ .~ .swp"


  if [ "$copiar_de_origem" = "" ] ; then
     echo "Erro na copia de arquivos : O endereco de origem não foi informado."
     return
  fi
  if [ "$copiar_para_destino" = "" ] ; then
     echo "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"`
    NOME_ARQUIVO_EXT=${NOME_ARQUIVO#*.}
    NOVA_PASTA="$copiar_para_destino/$ARQ_ATUAL_PASTA"
    COMPACTAR_ARQUIVO="S"
    SALVAR_ARQUIVO="S"
    [[ "$LISTA_NAO_SALVAR" =~ "${NOME_ARQUIVO_EXT}" ]] && SALVAR_ARQUIVO="N"
    ! [ -d "$NOVA_PASTA" ] && mkdir -p "$NOVA_PASTA"
    if [ -d "$NOVA_PASTA" ] && [ "$SALVAR_ARQUIVO" = "S" ] ; then
      [[ "$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"
      else
        echo "[$NOME_ARQUIVO_EXT] transferindo [$ARQ_ATUAL] para
[$NOVA_PASTA/$NOME_ARQUIVO]"
        cp  "$ARQ_ATUAL" "$NOVA_PASTA/$NOME_ARQUIVO"
      fi
    else
      echo "Falha ao copiar o arquivo [$ARQ_ATUAL] para [$NOVA_PASTA]."
      RESULT_VALUE="FALHOU"
    fi
  done < $temp
  [ -f "$temp" ] && rm -f "$temp"
}


Testei agora a pouco e tá funcionando redondo, é só colocar no seu
script a funcao acima e usa-la assim :
do_copy "/home/fulano" "/media/usbdisk"

Só preciso acrescentar mais tipos de arquivos que considero já
compactados e lista de extensoes de arquivos temporarias para o backup
ir mais rapido. Afinal não faz muito sentido compactar um jpg/zip/rar
e nem jogar para o backup aqueles horrendos .$$$

[]'s  a todos.


2009/8/13 hamacker <sirhamacker em gmail.com>:
> Olá pessoal,
>
> Estou procurando algum programa ao estilo rsync que recrie a estrutura
> original porém com os arquivos individualmente, explico.
>
> Os programas como tar/gz, 7zip, rar, zip, etc... comprimem diretorios
> inteiros depositando todos os diretórios dentro de um único pacote
> .7z/zip/tar.
> Eu gostaria de saber se há algum programa que apenas recrie os
> diretórios e comprima apenas os arquivos que existem nele, ex:
>
> /home/fulano/teste.odt
> /home/fulano/projetos/projeto-importante.dxf
>
> se tornaria na unidade de destino :
> /home/fulano/teste.odt.gz
> /home/fulano/projetos/projeto-importante.dxf.gz
>
> Eu gostaria de fazer isso para facilitar alguns obstaculos
> operacionais que temos por aqui.
> Eu venho estudando uma forma do rsync fazer isso, mas ainda não achei.
>
> Alguem conhece um método assim ?
>




More information about the ubuntu-br mailing list