Estou escrevendo um script bash que precisa excluir arquivos antigos.
Atualmente, é implementado usando:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Isso excluirá os arquivos com mais de 1 dia.
No entanto, e se eu precisar de uma resolução mais refinada nesse dia, digamos, com 6 horas? Existe uma boa maneira limpa de fazer isso, como se estivesse usando find e -mtime?
$LOCATION
e$REQUIRED_FILES
ambos possam ter vários valores, comodir1 dir2
e*.txt *.tmp
?Você pode fazer esse truque: crie um arquivo 1 hora atrás e use o
-newer file
argumento(Ou use
touch -t
para criar esse arquivo).fonte
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Cria um arquivotest
com sempre 1 hora de idade.Aqui está a abordagem que funcionou para mim (e não a vejo sendo usada acima)
excluir todos os arquivos com mais de 59 minutos e deixar as pastas intactas.
fonte
'*.*'
ou o shell o expandirá para nomes de arquivos reais, em vez de mantê-lo como um curinga parafind
resolver. Isso interrompefind
a operação recursiva em subdiretórios.-name '*.*'
não vai apagar arquivos que não têm extensão, comoREADME
,Makefile
, etc.Para SunOS 5.10
fonte
-mmin é por minutos.
Tente olhar para a página do manual.
para mais tipos.
fonte
Se você não possui "-mmin" em sua versão de "find", "-mtime -0.041667" fica muito próximo de "dentro da última hora"; portanto, no seu caso, use:
então, se X significa 6 horas, então:
funciona porque 24 horas * 0,25 = 6 horas
fonte
Aqui está o que se pode fazer pelo caminho que a @iconoclast estava pensando em seu comentário sobre outra resposta.
use crontab para usuário ou an
/etc/crontab
para criar arquivo/tmp/hour
:e use isso para executar seu comando:
fonte
*/1
por hora é redundante em seu crontab. É o mesmo que colocar * no campo da hora.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
fonte
Se a pessoa
find
não tem-mmin
e se também está presa a umafind
que aceita apenas valores inteiros-mtime
, então nem tudo está perdido se considerarmos que "mais antigo que" é semelhante a "não mais novo que".Se formos capazes de criar um arquivo que tenha um tempo mínimo de nosso tempo limite, podemos pedir
find
para localizar os arquivos que "não são mais novos que" nosso arquivo de referência.Para criar um arquivo que tem o carimbo de hora correta é um pouco envolvido, porque um sistema que não tenha uma adequada
find
provavelmente também tem uma menos-que-capazesdate
de comando que poderia fazer coisas como:date +%Y%m%d%H%M%S -d "6 hours ago"
.Felizmente, outras ferramentas antigas que podem gerenciar isso, ainda que de uma maneira mais difícil.
Considere que seis horas são 21600 segundos. Queremos encontrar o horário de seis horas atrás em um formato útil:
A declaração perl produziu uma data útil, mas precisa ser melhor utilizada:
Agora, a solução para esse UNIX antigo é algo parecido com:
Também pode ser uma boa ideia limpar nosso arquivo de referência ...
fonte