Como posso encontrar arquivos que foram alterados entre determinados horários?

Como posso encontrar arquivos que foram alterados entre determinados horários?

Eu tenho o Windows 7 box com o cygwin instalado. Tenho várias pastas com arquivos, dentro de uma única pasta raiz. Quero encontrar a lista de arquivos que possuem um carimbo de data/hora em um intervalo de datas específico.

Responder1

Você pode usar o findcomando com a -newerXYopção.

Deman find:

-mais recenteXYreferência
Compara o carimbo de data/hora do arquivo atual comreferência. OreferênciaO argumento normalmente é o nome de um arquivo (e um de seus carimbos de data e hora é usado para comparação), mas também pode ser uma string que descreve um tempo absoluto.XeSsão espaços reservados para outras letras, e essas letras selecionam qual horário pertence a comoreferênciaé usado para a comparação.

Os valores possíveis paraXeSsão como segue:

  • a - hora do último acesso ao arquivo atual oureferência
  • B - hora de nascimento do arquivo atual oureferência
  • c - hora da última mudança de status do inode do arquivo atual oureferência
  • m - hora da última modificação do arquivo atual oureferência
  • t -referênciaé uma string que representa um carimbo de data/hora (não válido paraX)

Xrefere-se ao arquivo atual eSpara oreferência, então você vai querer usar 'm' para a primeira letra (data de modificação do arquivo atual) e 't' para a segunda (carimbo de data e hora passado como uma string). Roteiro de exemplo:

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

Isto encontra todos os arquivos que foram modificados entre 1 e 15 de maio de 2012. O operador !(lógico NOT) inverte o significado do argumento que o segue - se -newerXYsignifica "X é mais recente que Y", então ! -newerXYsignifica "X é mais antigo que Y".


Uma opção alternativa, já que você está no Windows, é usar o Powershell. OGet-ChildItemcmdlet retorna todos os arquivos em uma determinada pasta (recursivamente, se desejado), e oWhere-Objectcmdlet permite filtrar a saída de outros comandos. Script de exemplo (assumindo que o diretório que você deseja pesquisar seja 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 CreationTimeem vez de LastWriteTimepara verificar a hora de criação do arquivo. O !$_.PSIsContainerfiltro retorna apenas arquivos ( PSIsContaineré verdadeiro para pastas e o ponto de exclamação é novamente o NOToperador lógico).

Responder2

Você pode usarGerente distante, Find Filecom filtro:insira a descrição da imagem aqui

Aperte o botão de filtro e pressione Insertpara inserir um novo filtro:insira a descrição da imagem aqui

Nomeie o filtro de alguma forma, insira a máscara de arquivo, marque Date/Time, selecione value change, desmarque Relativee insira os intervalos de data/hora:insira a descrição da imagem aqui

Clique em ok e, em Filters menu, pressione spacepara selecionar o filtro ( +deve aparecer ao lado do filtro):insira a descrição da imagem aqui

Pressione Enter e pressione Find:insira a descrição da imagem aqui

Resultados da pesquisa (neste exemplo fotos - máscara IMG_*.jpg- intervalo de datas para junho de 2022):insira a descrição da imagem aqui

Responder3

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 algumas leituras adicionais: Dicas avançadas para pesquisar no Windows, Usando sintaxe de consulta avançada programaticamente

informação relacionada