Suponha que tenho cerca de 10.000 arquivos em uma pasta. Tenho usado o crontab de hora em hora para localizar arquivos modificados nos últimos 60 minutos e processá-los.
Invoque find -mmin -60
às 01:00:00
Suponha que o primeiro arquivo foi modificado às 00:00:00 e facilmente encontrado por “localizar” às 01:00:00.
Então, suponha que o 10.000º arquivo foi modificado às 00:00:00 também
mas agora é às 01:10 : 00 e “find” ainda está trabalhando duro para alcançar o 10.000º arquivo
Então agora, 70 minutos depois, “find” retornará o 10.000 arquivo que foi modificado às 00:00:00?
Resposta
No GNU find
, o tempo de referência que é usado para avaliar arquivos com -mmin
etc. são calculados e armazenados quando a expressão é analisada , portanto, em vigor quando find
começa.
Isso significa que todas essas comparações de tempo usam a mesma referência de tempo para todos os arquivos avaliados, o tempo em que find
analisou sua linha de comando.
Resposta
Presumindo o GNU find, isso é facilmente testado:
% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 %
Portanto, embora b
tenha sido modificado pela última vez pelo menos 4 minutos após find
ser executado sleep 120
para a
, ainda corresponde.
Uma vez que -mmin
isn “t POSIX, isso depende da implementação, mas eu esperava o comportamento visto acima.
Comentários
- FW IW, o (baseado no FreeBSD?)
find
no meu Mac também mostra os dois arquivos comfind . -mmin 1 -exec sleep 120 \; -print
Resposta
Tente o seguinte comando um após o outro em dois terminais
Terminal 1:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
Terminal 2:
touch -d " 0 seconds ago" /path/to/some/file
podemos obter o resultado como
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
Estou prefixando a hora de início do comando com o resultado de busca. ele mostra, find
é capaz de pesquisar os arquivos que são modificados após a hora de início do comando.