Linux escreveu:
> Ola Lista,
> Eu estou precisando de um script para apagar arquivos e/ou diretórios de um
> servidor ftp.
> Eu preciso apagar tudo que for mais velho que 90 dias. 
> Eu tentei assim: 
> find /ftp_dir -mtime +90 -exec rm {} \;
> O problema é que o rm não apaga diretórios. Além disto quando, em um
> diretório, arquivos são apagados, a data do diretório é alterada. Assim o
> parametro mtime não “acha” esse diretório mais até que ele se torne outra
> vez mais velho que 90 dias.
> Alguém conhece uma boa solução para isso?
> Obrigado e boas festas
> Oscar
>   

Olá,

Poderia ter melhor formulado o assunto, pois seu problema não é FTP e 
sim find e rm, só uma dica...

O rm apaga diretórios com a opção -r, forçando com a opção -f para não 
dar nenhum erro e apagar na marra. Um solução para o caso que citou é 
usar o rm sobre uma lista de arquivos e diretórios antigos, mas temos um 
problema com diretórios: um diretório com mais de 90 dias pode conter um 
diretório que teve alterações em menos de 90 dias e o find irá lista o 
diretório com mais de 90 dias sem alterações que tem outro com menos de 
90 dias sem alterações, daí o rm -rf irá apagar o diretório antigo e 
todos subdiretórios e não deveria fazer isso.
Assim sendo, aconselho criar uma lista com todos os arquivos e outra com 
todos os diretórios antigos, apagar todos os arquivos antigos e usar o 
rmdir, o qual apaga apenas diretórios vazios, sobre a lista de 
diretórios em ondem alfabética reversa, apagando dessa forma os 
diretórios antigos vazios.

Entendida a lógica, vamos tentar:

#!/bin/bash

Diretorios_Antigos="`find /ftp_dir -mtime +90 -type d | sort -r`"
Arquivos_Antigos="`find /ftp_dir -mtime +90 ! -type d`"

echo "$Arquivos_Antigos" | while read Arquivo; do rm "$Arquivo"; done
echo "$Diretorios_Antigos" | while read Diretorio; do rmdir 
"$Diretorio"; done


E aí, deu certo?


-- 
Atenciosamente,

           Junior Polegato

           Um peregrino de problemas; Um pergaminho de soluções!
           Página Profissional: http://www.juniorpolegato.com.br

---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a