Por que o comportamento de 'find' difere usando -mtime -0 vs. +0?

1

O Ubuntu 14.04 fornece log rotating para o Tomcat 7 e assume arquivos de log nomeados por dia, então ele procura por aqueles e os existentes são compactados e deletados. Dependendo de se os arquivos de log existem e com que frequência eles são alterados, isso pode colidir com o esquema de nomenclatura mensal que meus próprios aplicativos da Web hospedados pelo Tomcat 7 estão usando:

/etc/cron.daily/tomcat7 :

gzip: /var/log/tomcat7/…/RebootDevice/2017-05.log.gz already exists;       not overwritten

Eu posso viver com essas mensagens sendo enviadas a cada poucos dias ou semanas, porque as mensagens de log por padrão contêm apenas erros e eles não devem ocorrer com muita frequência. A coisa que eu não entendo é porque eu recebo esta mensagem no segundo dia já. O Ubuntu faz o seguinte:

find /var/log/$NAME/ -name \*.$LOGEXT -daystart -mtime +0 -print0

Eu testei isso em meus diretórios reais com os seguintes resultados:

root@…:/var/log/tomcat7/…/RebootDevice# ls -lisa
[…]
1089049 0 -rw-r--r-- 1 tomcat7 tomcat7    0 Mai 29 09:09 2017-05.log
1089047 4 -rw-r--r-- 1 tomcat7 adm      402 Mai 26 10:22 2017-05.log.gz

root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime -0
root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime +0
./2017-05.log

Como você pode ver, a chamada usando +0 encontra meu arquivo, mesmo que ele tenha sido escrito pela última vez há dois dias, enquanto o -0 não é usado. -mtime é definido como n*24 horas, portanto, +/-0 não deve fazer nenhuma diferença e, do meu entendimento, -daystart está ancorando os testes apenas no início de um dia inteiro, deve ser 00:00 .

Então, por que -0 vs. +0 se comporta de maneira diferente nesse caso? Parece fazer uma diferença de 1*24 horas.

    
por Thorsten Schöning 31.05.2017 / 10:13

1 resposta

0

Em man find :

-mtime n
File's data was last modified n*24 hours ago. […]

Não importa se você usa -daystart ou não, independentemente de como o arredondamento funciona, para a invocação find específica, todos os arquivos podem ser divididos em vários conjuntos disjuntos alguma forma :

  • A: arquivos modificados há 0 dias,
  • B: arquivos modificados há 1 dia,
  • C: arquivos modificados há dois dias,
  • D: arquivos modificados há 3 dias,

O manual também declara:

Numeric arguments can be specified as

+n for greater than n,
-n for less than n,
n for exactly n.

Como você pode ver, o sinal de menos não é um fator (matemático) de menos um aqui. Em vez disso:

-mtime -0 não corresponde a nada;% -mtime 0 corresponde ao conjunto A;
-mtime +0 corresponde a B, C, D,….

-mtime -1 corresponde ao conjunto A;
-mtime 1 corresponde ao conjunto B;
-mtime +1 corresponde a C, D,….

-mtime -2 corresponde a A e B (é equivalente a ! -mtime +1 );
e assim por diante.

    
por 05.07.2017 / 18:01