msoliver
(usa Debian)
Enviado em 14/03/2016 - 19:14h
renato_bettini escreveu:
Olá, gostaria de saber como fazer a compactação de arquivos por data, mas não especificando uma data exatamente.
Por exemplo, tenho uma pasta com estes arquivos:
-rw-r--r-- 1 jboss jboss 224M Mar 12 00:00 access_log.2016-03-11
-rw-r--r-- 1 jboss jboss 338M Mar 13 00:00 access_log.2016-03-12
-rw-r--r-- 1 jboss jboss 151M Mar 14 00:00 access_log.2016-03-13
-rw-r--r-- 1 jboss jboss 30M Mar 14 08:11 access_log.2016-03-14
E desejo compactar diariamente os arquivos com 1 dia pra trás, ou seja, no caso acima, do dia 13 pra trás (nunca compactar o arquivo do dia atual).
Obrigado.
-----------------------------------------------------------------------------------------------------------------------
Boa noite , Renato.
Segue o script:
#!/bin/bash
####################################
## marcelo oliver-MARÇO/2016-Rev:00 ##
####################################
DIAU=$(($(printf "%(%d)T")-1))
MES=$(printf "%(%b)T")
MesAno=$(printf "%(%b-%Y)T")
INIC() {
printf "\n OPÇÕES DE BACKUP:\n\n [P]ARCIAL: SOMENTE DO DIA $DIAU.\n [G]ERAL: DO DIA $DIAU ao DIA 01.\n [E]XIT.\n\n"
read -p " OPÇÃO: " -n1 -e OPP
OPP="${OPP^^}"
if [[ $OPP != +(P|G|E|X) ]];then echo -e "\n OPÇÃO INVÁLIDA\n";INIC
elif [[ $OPP = +(E|X) ]];then echo -e "\n ENCERRANDO. . .";sleep 1.5;exit
elif [ $OPP = "P" ];then DIAD=$(($(printf "%(%d)T")-2));BACKUP
elif [ $OPP = "G" ];then DIAD="0";BACKUP
fi
}
BACKUP() {
echo -e "\n"
[ -d BKP_COMPAC_${MesAno} ] || mkdir BKP_COMPAC_${MesAno}
ARQ_COMP="BKP_COMPAC_${MesAno}"
> ARQ_GERAL.txt
ls -l|egrep '^-..' |sort -nk7 -r >> ARQ_GERAL.txt
while (($DIAU > "$DIAD"));do
ARQS=$(awk '$6 ~ /'$MES'/ && $7 == '$DIAU' {print $9}' ARQ_GERAL.txt)
if [ -z "$ARQS" ];then
echo -e "NãO Há ARQUIVOS EM:\n${DIAU}_${MES}"
else
tar -cf $ARQ_COMP/${DIAU}_${MES}.tar $ARQS
echo -e "COMPACTOU os ARQUIVOS\n$ARQS\nEM:$ARQ_COMP/${DIAU}_${MES}.tar"
fi
echo
let DIAU--
sleep 0.5
done
}
INIC
Como funciona:
OPÇÕES DE BACKUP:
[P]ARCIAL: SOMENTE DO DIA ANTERIOR.
[G]ERAL: DO DIA ANTERIOR ao DIA 01.
[E]XIT.
OPÇÃO:
Verifica se o dir "BKP_COMPAC_${MES}" existe,
se não existe, cria.
Gera a VAR $DIAU, com o dia anterior.
Gera a VAR $MES, com o mês atual.
Gera ARQ_GERAL.txt, com os arquivos do diretório
Faz um LOOPING, do dia anterior até o dia 01,
Busca por arquivos do mesmo dia, e gera a VAR ARQS
Se $ARQS é nula, mostra na tela:
echo -e "NãO Há ARQUIVOS EM:\n${DIA}_${MES}"
Senão, compacta e mostra na tela:
echo -e "COMPACTOU os ARQUIVOS\n$ARQS\nEM:$ARQ_COMP/${DIA}_${MES}.tar"
É isso!!!
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos, o que incentiva a continuar ajudando . . . :)
att.:
marcelo