shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] Backup de arquivos com data de criação no nome


From: Rodolfo Villanova
Subject: RES: [shell-script] Backup de arquivos com data de criação no nome
Date: Tue, 7 May 2002 14:35:08 -0300

Grande Mestre Julio,

Obrigado pelo apoio (incrível a rapidez da resposta!)
Era exatamente isso que estava precisando!

Atualmente estou trabalhando com outros sabores de Unix, em plataformas Sun
Solaris e Compaq Tru64 - troquei a fábrica de software da HP (saudações,
amigo Cassiano!) por uma empresa do grupo Telefonica (Telefonica Mobile
Solutions).

Lamento por que passastes por estes pagos e não tomamos um mate, vivente!!!
Que tal o Forum do Software Livre?

Saudações e agradecimentos.

Rodolfo Villanova

-----Mensagem original-----
De: Julio Cezar Neves - DISB.O
[mailto:address@hidden]
Enviada em: martes, 07 de mayo de 2002 13:55
Para: address@hidden
Assunto: RES: [shell-script] Backup de arquivos com data de criação no nome


Grande Rodolfo! Está tudo bem com vc, amigo?

O Aurélio andou dando umas dicas para manipulação de datas na lista que eram
muito simples, mas só eram executáveis em Linux e se não me engano estás
pilotando um HP-UX, né? Aqui vai a dica dele:

====================================>8CorteAqui8<===========================

Existe alguma forma simples/pronta de pegar a data de ontem??
Lembrando que "ontem" pode ser dia 30, 31 ou 29, pode ser também do ano
passado, ano bissexto, etc...

> > que tal essa?
> >
> > $ date --date '1 day ago'
> > Ter Ago  7 11:11:11 BRT 2001
> >
> >
> > - e assim dá pra fazer com day, month, year
> > - dá pra colocar o número que quiser tb na quantidade
> > - tire o 'ago' e a data vai ser no futuro.
> >
> > exemplos:
> >
> > ontem:       1 day ago
> > amanhã:      1 day
> > daqui um mês:  1 month
> > combinação:  1 month 15 days ago

====================================>8CorteAqui8<===========================

Esta é realmente uma tremenda solução em bash puro! Mas se vc estiver usando
outro sabor, a necessidade me obrigou a desenvolver 2 scrips: o primeiro -
dton.sh - transforma uma data em dias decorridos a partir de 01/01/1980 e o
segundo - ntod.sh - transforma números em datas.

Abaixo estes 2 scripts, que tb podem ser encontrados em
http://www.dicaslinux.com.br. Vale a pena uma visita. O site é mantido por
bons profissionais e está repleto de dicas.

====================================>8CorteAqui8<===========================

Prompt> cat dton.sh
#!/bin/ksh
#
#======================================================================
# Calcula qtd dias entre uma data passada como parametro e 01/01/1980.
# Se nao for passado nenhum parametro a data de hoje sera assumida.
# Obs. Para executar este programa sob o sh, trocar os $((..)) por expr
#======================================================================
# Leia: Linux - Programacao Shell  ISBN: 85-7452-048-9
# Autor: Julio Cezar Neves <mailto:address@hidden>
#======================================================================
#
if  [ $1 ]
then
        DFim=`echo $1 | cut -f1 -d"/"`
        MFim=`echo $1 | cut -f2 -d"/"`
        AFim=`echo $1 | cut -f3 -d"/"`
else
        DFim=`date +%d`
        MFim=`date +%m`
        AFim=`date +%Y`
fi

TotDias=$((1 + 365 * (AFim - 1980) + (AFim - 1980) / 4))
[ $((AFim % 4)) = 0 -a $MFim -le 2 ] && TotDias=$((TotDias - 1))

[ $MFim -ne 1 ] &&
for i in `echo "31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$((MFim - 1))
-d" " 2> /dev/null`
do
        TotDias=$((TotDias + $i))
done
echo $((TotDias + DFim))

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Prompt> cat ntod.sh
#!/bin/ksh
#
#==========================================================
# Recebe uma qtd de dias como parametro, e o transforma em
# uma data, que significa 1/1/1980 + parametro recebido.
# Obs. Para executar este programa sob o sh, trocar por
# $((..)) por expr
#==========================================================
# Leia: Linux - Programacao Shell  ISBN: 85-7452-048-9
# Autor: Julio Cezar Neves <mailto:address@hidden>
#==========================================================
#
Num=$(($1 - 1))
AFim=$((1980 + (Num / 365)))
DFim=$((Num % 365 - Num / 1460))
MFim=1
for i in 31 28 31 30 31 30 31 31 30 31 30 31
do
        [ $DFim -lt $i ] && break
        DFim=$((DFim - i))
        MFim=$((MFim + 1))
done
[ $DFim -eq 0 ] &&
        {
        DFim=29
        MFim=2
        }
[ $DFim -le 9 ] && echo "0$DFim/\c" || echo "$DFim/\c"
[ $MFim -le 9 ] && echo "0$MFim/\c" || echo "$MFim/\c"
echo $AFim

====================================.8CorteAqui8<===========================

Se precisar tb tenho rotinas para cálculo de horas.

Em tempo: Estive no III Fórum Internacional de Sistemas Abertos ai no RS e
me esqueci de te avisar :( Fica para a próxima, né?

Forte abraço,
Julio Cezar Neves

> -----Mensagem original-----
> De: Rodolfo Villanova
> [mailto:address@hidden]
> Enviada em: terça-feira, 7 de maio de 2002 12:46
> Para: address@hidden
> Assunto: [shell-script] Backup de arquivos com data de criação no nome
>
>
> Olá amigos, tudo bem?!
>
> Estou encontrando alguma dificuldade para fazer calculos com datas.
> Meu objetivo é elaborar um script que busca realizar backup
> de arquivos cujo
> nome contém a data de sua criação.
>
> Sei que existe uma formula simples para obter uma data
> anterior, do tipo:
> obter a data de dois dias antes da data atual do sistema, mas
> estou batendo
> cabeça na parede e não sai nada...!
>
> Dei uma olhada no "man" mas não encontrei algo esclarecedor.
>
> Poderia fazer uma função pra isso (tratar anos-bissextos e viradas de
> mês...argh!!), mas... pra quê reinventar a roda, não é mesmo?
>
>
> Grato antecipadamente,
>
>
> Rodolfo Villanova



reply via email to

[Prev in Thread] Current Thread [Next in Thread]