#  > Desenvolvimento >  > Linguagens de Programação >  >  Script para exclusão de arquivos antigos

## eduroges

Ola pessoal,
Estou precisando montar um script para excluir arquivos antigos de um determinado diretório. Tipo arquivos com mais de 5 dias seriam apagados.

Alguem tem alguma didca?

----------


## 1c3m4n

acho que ficaria mais ou menos assim:

for arquivo in `find / -atime 5`; do
rm $arquivo
done


teste somente o comando find / -atime 5 pra ver se sao esses arquivos msm que vc quer apagar, o atime eh -atime 24*n
http://linux.about.com/od/commands/l/blcmdl1_find.htm

----------


## eduroges

Valeu pela dica!
Consegui chegar ao resultado com o seguinte comando?



```
find -maxdepth 1 -type f -ctime +5 -exec rm -f \{\} \;
```

 
Sendo que +5 significa arquivos modificados a mais de 5 dias.

----------


## Mameli

Preste atenção!!!!!

No script que você utilizou, o parâmetro ctime serve para filtrar alterações de Status do arquivo e não a data da última modificação.

O script pode ser mais simples usando:
find . -type f -mtime +5 | xargs rm -f

Traduzindo:
Procure a partir do local corrente tudo o que for do tipo f (arquivo) cuja última alteração se deu a mais de 5 dias. Cada arquivo encontrado deverá ser apagado.

&#91;]s

Mameli

----------


## eduroges

Legal, obrigado pela dica!

Na verdade eu precisava de um comando ou script para apagar arquivos antigos que foram enviados às lixeiras do SAMBA.
Essas lixeiras são diretórios e estão espalhadas em vários locais dentro de /home.

Consegui chegar ao seguinte comando:


```
find /home -name .recycle -type d -exec find {} -mtime +5 \; | xargs rm -f
```

 
Alguem tem mais alguma dica? Será que está correto?

----------


## terra_jr

Entao se eu fizer:



```
find / -atime 5`
```

 Ele me trará os arquivos acessados a mais de 5 dias?




```
find / -mtime 5`
```

 Ele me trará os arquivos modificados a mais de 5 dias?




```
find / -ctime 5`
```

 Ele me trará os arquivos criados a mais de 5 dias?

Correto? É isso que eu entendi?

----------


## eduroges

> Na verdade eu precisava de um comando ou script para apagar arquivos antigos que foram enviados às lixeiras do SAMBA.
> Essas lixeiras são diretórios e estão espalhadas em vários locais dentro de /home.
> 
> Consegui chegar ao seguinte comando:
> 
> 
> ```
> find /home -name .recycle -type d -exec find {} -mtime +5 \; | xargs rm -f
> ```


Ola pessoal, corrigindo isso: "pensei que tivesse conseguido!"
A rotina do "find" está funcionando certinho, contudo não está excluindo os arquivos. Suponho que o problema está nos "nomes longos do Windows", que podem conter espaços. Acredito que isso esteja confundindo o comando.
Como eu poderia resolver isso? Como retornar o nome do arquivo com aspas?

----------


## fabricio_

pq vc da um find dentro do outro ??
find /home -name .recycle -type d -mtime +5 -exec echo {} \;

veja se ele ecoa oq vc quer realmente deletar , se sim , troque o echo pelo rm -vf

----------


## terra_jr

Olha, eu vi como fazer de algumas maneiras, mas to com um problema.

O mapeamento é //dados/terra

Então no meu script eu posso usar:

*find //dados/terra -atime +3*
Este ele me mostra todos os arquivos que foram modificados a mais de 3 dias. 

*find //dados/terra -mtime +3*
Modificados a mais de 3 dias. 

*find //dados/terra -ctime +3*
Criados a mais de 3 dias. 

Depois eu redireciono a saída para o arquivo >/tmp/arquivo3dias
E uso "cat /tmp/arquivo3dias | xargs rm -fR" para apagar todos os arquivos que contém no arquivo3dias, ok?!

O problema é, eu preciso encontrar a data mais sensata para apagar os arquivos.
Nas propriedades de um arquivo há a data de *criação*, *modificação* e *último acesso*. Mas imagine que eu use o script para pegar a data de último acesso. E o usuário acessou o arquivo a 2 semanas e jogou lá para outro cara ver. Então meu script irá apagar este arquivo.
Se eu pegar pela data de modificação, e o cara modificou esse arquivo a muito tempo, então pronto, meu script terá o nome de SEM_DÓ ou SERIAL_KILLER. (hahaha)

Alguém conhece "algo" (talvez no samba) que eu possa pegar como referencia para saber se o arquivo está lá a mais de 3 dias. 

Estou pensando em algo como quando eu agendar para executar o scritp eu faço uma leitura no mapeamento todo, e gravo em um arquivo, farei isso 3 vezes (3 dias), pois na próxima (4º dia) ele verificará os arquivos que possui na lista 1 e na lista 4 e apagará eles. Né?

O que acham?
Dá pra mandar bala.?!

----------

