script de remoção [RESOLVIDO]

1. script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 20/06/2008 - 21:46h

Pessoal to montando um script para remover arquivos do dia anterior, mas o comando date ta pegando vou colocar # na linha que não está funcionando. Em UNIX funciona.

data=$(date +%d%m%Y)
#data_old= $data - 1
rm -rf *$data_old*


[ ]s


  


2. Muito simples

Wilker Azevedo
cytron

(usa Slackware)

Enviado em 20/06/2008 - 21:59h

O problema é o 'espaço' que tem depois do '=' e em volta o '-'

Em shell script não pode haver esse espaço, pelo menos no Linux.

E tem que colocar mais '( )'

tem que ficar assim:

data=$(date +%d%m%Y)
data_old=$(($data-1))
echo $data_old

Só não endendi como vai pegar o dia anterior, dá uma olhada no conteúdo de $data, tá meio estranho.


3. Re: script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 20/06/2008 - 22:26h

Show de bola iluminou.

dia=$(date +%d)
mes=$(date +%m)
ano=$(date +%Y)
dia_old=$(($dia-1))
rm -rf *$dia_old$mes$ano*

Acho que agora está OK. Irei testar.


Obrigado.



4. Re: script de remoção [RESOLVIDO]

Wilker Azevedo
cytron

(usa Slackware)

Enviado em 20/06/2008 - 22:41h

Opa!!!!!

kkkkk

Só não leve em consideração essa última linha que coloqui no lugar do seu "rm".

É porque fui testar aqui, e ao invés de apagar eu preferi apenas mostrar na tela: echo

Ok?

Então tire essa linha echo ... porque com ela seu script vai mostrar a data ao invés de apagar.

Provavelmente você perceberá assim que rodar o script hehehe.


5. Re: script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 20/06/2008 - 22:54h

Não quanto a isso OK. Este trecho esta legal.

Mas e se no caso eu quisesse remover arquivos de 1 semana atrás considerando o dia de hoje. Como comparar a data de criação dos arquivos?


[]


6. Re: script de remoção [RESOLVIDO]

Wilker Azevedo
cytron

(usa Slackware)

Enviado em 20/06/2008 - 23:46h

Agora complicou, isso requer shell avançado.

Eu poderia dizer pra você fazer assim:

if [ $data == $data-7 ]; # Para semana passada

Mas tem um bug, usando aritimética para números normais ao fazer $data-32 ele não vai pegar o mês anterior, vai simplesmente subtrair 32 do número que existem em $data. Isso acontece porque neste modo não está trabalhando com "datas", existe uma maneira diferente para se trabalhar com datas, usando comandos próprios para isso.

Veja só:

data: 20080631 (2008/06/31)
20080631 + 1 (não é = 2008/07/01)

O resultado será 20080632 (2008/06/32)
Bugado, pois não existe mês com 32 dias.

Reveja seu script para não acontecer este bug em um determinado dia do backup.

Infelismente não sei trabalhar com datas no shell. Só em PHP, mas se shell estiver difícil pra você sugiro pegar PHP, pois além de executar via web ele também roda no terminal como shell. Ex.:

#!/bin/php
...
...

E pode manipular arquivos e diretórios tão bem quando um shell script. Além do mais, ele roda comandos. E o mais importante, trabalha muito bem com datas. Você pode ir mais além organizando informações em banco de dados, verificar o backup remotamente.


7. Re: script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 21/06/2008 - 00:02h

Hum PHP não conheço nada. Mas vou atrás dessa alteração. Te passo se souber de alguma coisa.

Curiosidade: Descobri que o a conta de root expira por padrão depois de 99999 dias (~300anos), abre o /etc/login.defs veja o parâmetro PASS_MAX_DAYS. Loucura né.

[]


8. Re: script de remoção [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 21/06/2008 - 11:01h

Tirar um da data não é uma solução muito boa...

O melhor seria fazer:

date -d '1 day ago' #para o dia anterior

date -d '1 week ago' #para a semana anterior

Com isso vc evita vários problemas que as datas podem trazer.


9. Re: script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 21/06/2008 - 11:31h

Opa, mas em que momento não seria legal subtrair 1 dia?


Sobre a idéia abaixo, '1 day ago' e '1 week ago' pode ser passado como argumento para o date?

date -d '1 day ago' #para o dia anterior

date -d '1 week ago' #para a semana anterior


Recebi essa sugestão hoje.

find /[dir] -mtime 7 -exec rm -rf {}\
#para arquivos com 1 semana de criação

[]


10. Re: script de remoção [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 21/06/2008 - 11:49h

Um exemplo básico seria na virada do mês, o shell não tem um tipo data, então o que vc passar pra ele será considerando um número: 1-1=0 e não 30 ou 31 ou 28 em fevereiro, tirar um funciona para o mês, mas não entre meses ou entre anos, o mesmo vale para a semana passada, 1-7=-6.

Vc teria que criar a lógica para diversas coisas, como verificação se o mês tem 28,30 ou 31 dias, o 29 no caso do ano ser bissexto, mais a lógica para verificar se o ano é bissexto, isso para garantir que funcionará bem.

O '1 day ago' e o '1 week ago' são parâmetros date, normal sem probs quanto a isso.

Quanto ao find e o '1 week ago', ai vc teria que pensar oq vc quer dizer com '1 semana atrás'; isso para vc significa sete dias anteriores ao dia de hoje, ou quer dizer literalmente semana passada; são conceitos diferentes.

Exemplo:

Hoje é dia 8 domingo, primeiro dia da semana, se vc pensar em sete dias atrás isso quer dizer que vc removerá os arquivos do dia 1.

Agora se vc pensar na semana anterior terá que remover todos os arquivos do dia 1 ao 7.




11. Re: script de remoção [RESOLVIDO]

Carlos Eduardo Romeiro Polimeni
Kharlux

(usa RedHat)

Enviado em 21/06/2008 - 16:43h

Entendi o problema, mas o date tavez busque alguma referência do cal #comando calendário.
Eu sei que a nível de sistema é possivel prever um calendário até o ano de 2400. Mas não fiz o teste pra ver se a dia fica negativo.

Então a sacada é remover arquivos com data de modificação de 7 dias atrás, porque são arquivos de backup e como eu faço transferência via sftp só deixo a cópia local como segurança.

find /[dir] -mtime 7 -exec rm -rf {}\
#para arquivos com 1 semana de criação


Mas legal essa sua colocação, é um ponto pra pensar.

[]


12. erro

Juliao Junior
juliaojunior

(usa Debian)

Enviado em 21/06/2008 - 17:48h

esse é um erro comum p quem começa em shell: uso dos espaços. afinal, isso não ocorre em outras linguagens.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts