Encontre arquivos em um diretório por dois dias, por exemplo, hoje e ontem

1

Eu preciso de um comando ou script de shell para encontrar arquivos dentro de uma pasta para hoje e ontem no Linux.

Exemplo

Se eu executar o comando hoje, ele deverá fornecer a lista de arquivos criados hoje e também ontem.

Eu tentei os seguintes comandos, mas não obtive a saída esperada:

find . -type f -mtime +2 -prune -o -mtime +1 -exec ls -ltr {} \;

Está me dando apenas um arquivo para hoje e alguns de ontem e anteontem.

    
por Arpit Gupta 18.07.2016 / 07:25

1 resposta

2

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.

    
por 18.07.2016 / 08:16