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?
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?
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
Valeu pela dica!
Consegui chegar ao resultado com o seguinte comando?
Código :find -maxdepth 1 -type f -ctime +5 -exec rm -f \{\} \;
Sendo que +5 significa arquivos modificados a mais de 5 dias.
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.
[]s
Mameli
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:
Código :find /home -name .recycle -type d -exec find {} -mtime +5 \; | xargs rm -f
Alguem tem mais alguma dica? Será que está correto?
Entao se eu fizer:
Ele me trará os arquivos acessados a mais de 5 dias?Código :find / -atime 5`
Ele me trará os arquivos modificados a mais de 5 dias?Código :find / -mtime 5`
Ele me trará os arquivos criados a mais de 5 dias?Código :find / -ctime 5`
Correto? É isso que eu entendi?
Ola pessoal, corrigindo isso: "pensei que tivesse conseguido!"Postado originalmente por eduroges
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?
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
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.?!