'find -mtime' não retorna resultados que 'ls -l' show estão lá

2

Em um sistema Red Hat Linux, eu tenho um diretório com várias centenas de arquivos. Eu queria excluir todos os arquivos com mais de 24 horas. Eu fiz a exclusão usando find . -type f -mtime +1 -delete . Coisas triviais, certo? Em seguida, ao verificar os resultados, descobri que ls -l relata arquivos com mais de 24 horas no diretório. Observe a data abaixo e o resultado da última descoberta:

> date
Sun Jan  5 19:02:43 PST 2014
> find . -type f -mtime +1 | wc -l
0
> find . -type f | xargs /bin/ls -l | grep 'Jan  3' | wc -l
70

Curiosamente, não há arquivos com mais de 48 horas. (Havia definitivamente eram antes.) Neste ponto, no entanto, estou bem e verdadeiramente perplexo. Eu provavelmente estou sentindo falta de algo óbvio, mas o que? Alguém pode, por favor, me esclarecer?

    
por mhucka 06.01.2014 / 04:13

1 resposta

3

Para find , "+1" significa maior que 1. Além disso, ao calcular a idade em dias, ele é arredondado para o número inteiro mais próximo.

Esse comportamento está documentado na página man:

When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

No seu exemplo, esses dois dias completos significam que ele deve ter encontrado arquivos apenas se fossem mais antigos que Jan 3 19:02:43. Qualquer arquivo feito depois disso em 3 de janeiro não seria encontrado.

Então, quando você escreveu "Curiosamente, não há arquivos com mais de 48 horas", isso significa que find está se comportando exatamente como documentado, por mais perverso que isso seja.

    
por 06.01.2014 / 04:52

Tags