¿Cómo puedo encontrar archivos que han cambiado en determinados momentos?

¿Cómo puedo encontrar archivos que han cambiado en determinados momentos?

Tengo windows 7 box con cygwin instalado. Tengo varias carpetas con archivos, dentro de una única carpeta raíz. Quiero encontrar la lista de archivos que tienen una marca de tiempo dentro de un rango de fecha y hora específico.

Respuesta1

Puedes usar el findcomando con la -newerXYopción.

Deman find:

-nuevoXYreferencia
Compara la marca de tiempo del archivo actual conreferencia. ElreferenciaEl argumento normalmente es el nombre de un archivo (y una de sus marcas de tiempo se usa para la comparación), pero también puede ser una cadena que describe un tiempo absoluto.XyYson marcadores de posición para otras letras, y estas letras seleccionan qué tiempo pertenece a quéreferenciase utiliza para la comparación.

Los valores posibles paraXyYson como sigue:

  • a - hora del último acceso al archivo actual oreferencia
  • B - hora de nacimiento del archivo actual oreferencia
  • c - hora del último cambio de estado del inodo del archivo actual oreferencia
  • m - hora de la última modificación del archivo actual oreferencia
  • t -referenciaes una cadena que representa una marca de tiempo (no válida paraX)

Xse refiere al archivo actual yYhaciareferencia, por lo que querrás usar 'm' para la primera letra (fecha de modificación del archivo actual) y 't' para la segunda (marca de tiempo pasada como una cadena). Guión de ejemplo:

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

Esto busca todos los archivos que se modificaron entre el 1 y el 15 de mayo de 2012. El operador !(lógico NOT) invierte el significado del argumento que le sigue: si -newerXYsignifica "X es más nuevo que Y", entonces ! -newerXYsignifica "X es más antiguo que Y".


Una opción alternativa, ya que estás en Windows, es usar Powershell. ElGet-ChildItemcmdlet devuelve todos los archivos en una carpeta determinada (de forma recursiva, si se desea), y elWhere-Objectcmdlet le permite filtrar la salida de otros comandos. Script de ejemplo (asumiendo que el directorio que desea buscar es el directorio actual):

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

Esto devuelve todos los archivos modificados entre el 1 y el 15 de mayo de 2012. Puede utilizar CreationTimeen lugar de LastWriteTimepara comprobar la hora de creación del archivo. El !$_.PSIsContainerfiltro solo devuelve archivos ( PSIsContaineres cierto para las carpetas y el signo de exclamación es nuevamente el NOToperador lógico).

Respuesta2

Puedes usarGerente lejano, Find Filecon filtro:ingrese la descripción de la imagen aquí

Presione el botón de filtro y presione Insertpara insertar un nuevo filtro:ingrese la descripción de la imagen aquí

Nombra el filtro de alguna manera, ingresa la máscara del archivo, marca Date/Time, selecciona el valor change, desmarca Relativee ingresa los rangos de fecha/hora:ingrese la descripción de la imagen aquí

Presiona Aceptar y, en Filters menu, presiona spacepara seleccionar el filtro ( +debería aparecer al lado del filtro):ingrese la descripción de la imagen aquí

Presione enter y presione Find:ingrese la descripción de la imagen aquí

Resultados de la búsqueda (en este ejemplo, fotos - máscara IMG_*.jpg- rango de fechas para junio de 2022):ingrese la descripción de la imagen aquí

Respuesta3

También es posible encontrar esos archivos con GUI File Explorer. Algunos ejemplos:

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

Y algunas lecturas adicionales: Consejos avanzados para buscar en Windows, Uso de la sintaxis de consulta avanzada mediante programación

información relacionada