Veja se esse script que eu fiz atende as suas necessidades: ----------------------------------------------------------------------------- #!/bin/bash #Programa em shell script que realiza backups individuais #do home de cada usuário #Este programa também controla a quantidade de backups, #baseando-se na data de criacao dos mesmos. #Atraves da variavel _NUMBACKUPS, é possível definir quantos #backups existirao no total. #
# # #Coloque os dados entre aspas duplas _ORIGEM="/teste" _DESTINO="/backups" _NUMBACKUPS="2" #--------------------Nao Mexa daqui pra baixo------------------ VERSAO="0.1" CHANGELOG=" 2008-08-30 - Disponibilizada a versao 0.1 " MENSAGEM_USO=" $(basename "$0") Criado por Jeferson dos Santos [ jefer...@jeferson.info ] Este programa é disponibilizado e atualizado no site http://jeferson.info e disponibilizado sob Licenca GPLv2. Este programa realiza o backup do diretorio home do usuario, criando copias em um destino, organizadas cronologicamente. É possivel tambem definir o numero de backups a se manter. Uso:$(basename "$0") [-h | --help | --ajuda | -V | --version | --versao] -h, --help, --ajuda Mostra esta tela de ajuda e sai -V, --Version, --versao Mostra versao e changelog e sai " case "$1" in -v|--version|--versao) echo "" echo -n $(basename "$0"), versao "$VERSAO" echo "" echo "Changelog" echo "$CHANGELOG" exit 0 ;; -h|--help|--ajuda|*) echo "$MENSAGEM_USO" exit 0 ;; esac #esta eh uma expressao regular para definir o formato em que os #diretorios devem estar. Este formato ainda nao eh perfeito pq #pega certas datas que nao existem como 31/02 mas sem grandes #transtornos, ate o momento :-D #Ainda irei analizar as funcoesZZ do Aurelio para ver como ele #define exatamente a questao da data _FORMATODIRETORIO='20[0-9]|[0-9]-(0[1-9|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[012])' _DATA="$(date +%Y-%m-%d)" #Esta funcao tem o objeto contar quantos diretorio existem BACKUP_CONTAGEM () { ls -1d -rt "$_DESTINO"/*/ | egrep -c "$_DESTINO""/"$_FORMATODIRETORIO } #Esta funcao se encarrega de organizar os diretorios por data reversa BACKUP_ANTIGO () { ls -1d -rt "$_DESTINO"/*/ | egrep "$_DESTINO""/"$_FORMATODIRETORIO } #testa se o diretório de destino existe if [ ! -d "$_DESTINO" ] ; then echo "destino nao é diretório, abortando" exit 1 fi #se existir testa se existe permissão de escrita if [ ! -w "$_DESTINO" ] ; then echo "destino sem permissao d escrita, abortando" exit 2 fi #Verifica se o diretorio de destino nao contem nenhum diretorio #de backups if [ ! $(echo $(BACKUP_CONTAGEM)) -eq 0 ] ; then #Enquanto houver mais diretórios de backup que o maximo especificado, while [ `echo $(BACKUP_CONTAGEM)` -ge "$_NUMBACKUPS" ] ; do rm -Rf $(BACKUP_ANTIGO | sed -n 1p) done fi #cria diretorio para comportar os backups mkdir "$_DESTINO"/"$_DATA" #aqui começa o backup propriamente dito. #Para cada diretorio dentro de $_origem, ele gera um arquivo #de backup dentro do diretorio de destino, no subdiretorio #da data atual for USUARIO in $(ls -1d "$_ORIGEM"/*/|rev|cut -d "/" -f 2 |rev) ; do tar zcvf "$_DESTINO"/"$_DATA"/"$(echo $USUARIO)".tar.gz "$_ORIGEM"/"$USUARIO" done ------------------------------------------------------------------------------------------------------------------------------------- 2009/8/18 Márcio Gil <marciom...@bol.com.br> > > > Há... o comando for pode ser simplesmente: > > for DIR in !(*in|*out)/ ; do > ... > > (não esquecer da linha "shopt -s extglob" no ".bashrc") > > > > -----Original Message----- > > From: Márcio Gil > > > > Que tal: > > > > ls -d !(*in|*out)/ > > > > > -----Original Message----- > > > FromInformática GMAIL > > > > > > Bom dia pessoal, > > > Antes de mais nada quero agradecer a oportunidade de > > > participar desse grupo, > > > estou entrando hoje (13/08/2009) > > > Comecei a mexer com Linux agora e tenho muitas duvidas sobre > > > Shell-script e > > > agradeço antecipadamente se alguém puder me ajudar. > > > > > > Estou com a seguinte situação, tenho um diretório /home no > > > meu servidor onde > > > tem as pastas dos usuários. > > > Existe as pastas dos usuários e cada usuário também tem mais > > > 2 pastas que > > > terminam com in e out. > > > Por exemplo: user1, user1in, user1out, xyz, xzyin, xyzout, etc. > > > > > > Eu quero listar apenas os usuários e não os in e out, como > > > posso fazer isso? > > > > > > Eu estou querendo criar um script de backup para que ele > > > entre no user1 e da > > > um tar compactando, depois ele entre no xyz e dar um tar e > assim > > por > > > diante. > > > > > > Eu consegui que ele entre em todos os diretórios. > > > > > > Segue o script bem simples > > > > > > #!/bin/bash > > > #mkdir /mnt/win/$(date +"%d%m%Y") > > > > > > > > > for DIR in $(ls -d */) > > > #|grep '^out') > > > do > > > echo "Efetuando Backup do diretorio - $DIR..." > > > # tar -cvjf /mnt/win/$(date +"%d%m%Y")/Backup-$DIR-$(date > > > +"%d%m%Y").tar.bz2 /home/$DIR 2>error.txt > > > Done > > > > > > Alguém pode me dar um ajuda? > > > > > > Obrigado > > > > > > Andre > > > > > > > > > > -- Abraços, Jeferson Santos [As partes desta mensagem que não continham texto foram removidas]