Para -daystart
, o manual diz:
-- Option:
-daystart
Measure times from the beginning of today rather than from 24 hours ago. So, to list the regular files in your home directory that were modified yesterday, do
find ~/ -daystart -type f -mtime 1
The '-daystart' option is unlike most other options in that it has an effect on the way that other tests are performed. The affected tests are '-amin', '-cmin', '-mmin', '-atime', '-ctime' and '-mtime'. The '-daystart' option only affects the behaviour of any tests which appear after it on the command line.
O que isso significa se você executar:
find . -daystart -mtime 1
no dia seguinte ao horário de inverno (2015-10-25 na Europa este ano), que deve fornecer os arquivos modificados pela última vez entre 2015-10-25 01:00
(a primeira ocorrência desse período) e 2015-10-25 23:59:59.999...
.
Se executar como
find . -daystart -mtime 0
em 2015-10-25, espera-se que você obtenha os arquivos modificados entre 00:00 e 22:59:59, mas fazer um teste simples (com findutils 4.4.2) mostra que ele retorna arquivos modificados entre as primeiras 01:00 e 23:59:59 (a menos que seja executado antes da mudança de horário).
$ find . -printf '%TFT%TT %p\n'
2015-09-25T14:28:25.4868761490 .
2015-10-25T00:02:00.0000000000 ./a
2015-10-25T23:43:00.0000000000 ./c
2015-10-25T12:42:00.0000000000 ./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 0
./c
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 00:32' find . -daystart -mtime 0
./a
./b
$ NO_FAKE_STAT=1 faketime -m '2015-10-25 12:23' find . -daystart -mtime 1
./a
Em qualquer caso, a declaração Então, para listar os arquivos regulares em seu diretório inicial que foram modificados ontem acima, nem sempre é verdade.
Sem -daystart
, a verificação é para arquivos modificados em unidades de 24 horas. Então, se você executar em 12:43
em 2015-10-25, find . -mtime 0
fornecerá arquivos modificados entre 2015-10-24 13:43 e agora.
Uma maneira mais confiável de fornecer os arquivos que foram modificados pela última vez ontem seria:
find . -newermt 'yesterday 0' ! -newermt 'today 0'
Observe que ele inclui os arquivos que foram modificados pela última vez hoje às 00: 00: 00.0000000000 e não os que estavam naquele momento ontem. Infelizmente não há predicado -oldermt
.
Observe que a função zsh
do age
é usada em globs como:
$ autoload age # in ~/.zshrc
$ ls -ld -- *(age,yesterday,)
tem problemas semelhantes.