Com o GNU find
:
find . -daystart -type f -mtime -2 -mtime +-1 -ls
Dar-lhe-iam os ficheiros modificados pela última vez entre ontem às 00:00:00 e hoje 23: 59: 59.999999999. Pode dar resultados errados em torno da mudança de / para o horário de verão (em fusos horários que têm horário de inverno / verão), já que conta o número de unidades de 24 horas desde o início de hoje e em torno do horário de verão. um dia de 23 ou 25 horas.
Você também pode fazer (ainda com GNU find
):
find . -type f -newermt yesterday ! -newermt tomorrow -ls
Mas isso daria aos arquivos modificados exatamente às 00: 00: 00.000000000 de amanhã, e não àquele modificado ontem. É muito improvável que um arquivo tenha sido modificado pela última vez nesse nanossegundo, mas isso pode acontecer com arquivos cuja hora de modificação foi definida arbitrariamente com touch
, por exemplo, ou em sistemas de arquivos que não têm granularidade de tempo sub-segundo. / p>
com zsh
:
autoload age # best in ~/.zshrc
ls -lrtd -- *(D.e:'age yesterday tomorrow':)
Ou recursivamente como com find
:
ls -lrtd -- **/*(D.e:'age yesterday tomorrow':)
(mesma nota sobre limites como find -newermt
acima).
Por que você não conseguiu o resultado certo com:
find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;
Primeiro, observe que -a
(implícito quando omitido) tem precedência sobre -o
, portanto, o que está acima é, na verdade:
find . \( -type f -a -mtime +2 -a -prune \) -o \
\( -mtime +1 -a -exec ls -ltr {} \; \)
Portanto, o -type f
só se aplica no primeiro grupo.
-mtime +2
seleciona arquivos cuja idade arredondada para o próximo dia (24 horas) é estritamente maior que 2, ou seja, arquivos que foram modificados pela última vez há mais de 48 horas (em comparação com a data atual) e -mtime +1
arquivos que foram modificados pela última vez há mais de 24 horas.
Você quer a idade em comparação com o início do dia (daí a (% específica do GNU)-daystart
).
Observe também que, com -exec ls -lrt {} \;
, você está executando um ls
por arquivo, portanto, a opção -rt
para classificar os arquivos é inútil. O ls
tem apenas um arquivo para classificar. Você poderia usar -exec ls -lrt {} +
, mas, mesmo assim, se a lista de arquivos for grande, ls
pode ser chamado várias vezes.