Compactação de arquivos (tar) por data.

1. Compactação de arquivos (tar) por data.

renato bettini
renato_bettini

(usa Red Hat)

Enviado em 14/03/2016 - 08:16h

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.




  


2. Re: Compactação de arquivos (tar) por data.

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 14/03/2016 - 08:20h

Você pode desenvolver um script que compare a data atual do sistema com a data do arquivo com um "if", caso a comparação seja maior de 1 dia, o script deverá fazer a compactação.

Uma vez pronto o script você deve agendar a execução dele com o cron.

Aprendendo ShellScript
http://www.devin.com.br/shell_script/
http://aurelio.net/shell/canivete/

Entendendo o cron
https://en.wikipedia.org/wiki/Cron
https://www.vivaolinux.com.br/artigo/Agendando-tarefas-em-Linux-Unix-usando-o-cron
https://www.google.com.br/search?q=usando+o+crontab&ie=utf-8&oe=utf-8&gws_rd=cr&ei=p...

http://goo.gl/g6NiFp


3. Re: Compactação de arquivos (tar) por data.

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/03/2016 - 09:51h

Pesquise sobre o Logrotate.

http://www.dicas-l.com.br/arquivo/utilizando_logrotate.php


4. Re: Compactação de arquivos (tar) por data.

Marcelo Oliver
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







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts