Como posso encontrar arquivos que foram alterados entre determinados momentos?

1

Eu tenho o windows 7 box com o cygwin instalado. Eu tenho várias pastas com arquivos, dentro de uma única pasta raiz. Desejo localizar a lista de arquivos que possuem um registro de data e hora em um intervalo de data específico.

    
por dublintech 28.05.2012 / 13:07

2 respostas

2

Você pode usar o comando find com a opção -newerXY .

Em man find :

-newerXY reference
Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are placeholders for other letters, and these letters select which time belonging to how reference is used for the comparison.

Os valores possíveis para X e Y são os seguintes:

  • a - hora do último acesso do arquivo atual ou referência
  • B - hora de nascimento do arquivo atual ou referência
  • c - último tempo de alteração do status do inode do arquivo atual ou referência
  • m - hora da última modificação do arquivo atual ou referência
  • t - referência é uma string representando um timestamp (não válido para X )

X refere-se ao arquivo atual e Y à referência , então você vai querer usar 'm' para a primeira letra (data de modificação do arquivo atual) e 't' para o segundo (registro de data e hora passado como uma string). Exemplo de script:

find . -type f -newermt "2012-05-01" ! -newermt "2012-05-15"

Isso localiza todos os arquivos que foram modificados entre 1 e 15 de maio de 2012. O operador ! (logical NOT ) inverte o significado do argumento após ele - se -newerXY significa "X é mais recente que Y", então ! -newerXY significa "X é mais antigo que Y".

Uma opção alternativa, desde que você está no Windows, é usar o Powershell. O cmdlet Get-ChildItem retorna todos os arquivos em uma determinada pasta (recursivamente, se desejado) e o cmdlet Where-Object permite filtrar a saída de outros comandos. Exemplo de script (assumindo que o diretório que você deseja pesquisar é o diretório atual):

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -ge "2012-05-01" -and $_.LastWriteTime -le "2012-05-15" -and !$_.PSIsContainer }

Isso retorna todos os arquivos modificados entre 1 e 15 de maio de 2012. Você pode usar CreationTime em vez de LastWriteTime para verificar o tempo de criação do arquivo. O filtro !$_.PSIsContainer retorna apenas arquivos ( PSIsContainer é verdadeiro para pastas e o ponto de exclamação é novamente o operador NOT lógico).

    
por 28.05.2012 / 13:41
-1

Também é possível encontrar esses arquivos com o GUI File Explorer. Alguns exemplos:

datemodified:2015-02-18 08:00..2015-02-18 13:00
datemodified:>2015-02-18 08:00
datemodified:<2015-02-18 08:00

E mais algumas leituras: Dicas avançadas para pesquisar no Windows , Usando a sintaxe de consulta avançada por programação

    
por 31.03.2015 / 11:48