¿Encontrar archivos modificados durante la hora del día?

¿Encontrar archivos modificados durante la hora del día?

Necesito encontrar todos los archivos que se editaron durante el horario de oficina solo porque la computadora se puede usar para trabajar independientemente por la noche. ¿Existe alguna forma de buscar la hora del día creada/modificada independientemente de la fecha? Tengo sistemas Windows y Linux disponibles.

Respuesta1

Sí, puedes buscar fechas de modificación para cualquier programa/archivo utilizando un software gratuito llamadobuscar todo. Sin embargo, deberá hacer clic en la columna Fecha/Hora en el programa y revisarla usted mismo manualmente. Lamentablemente, no existe ningún programa que haga esto por usted. Espero que esto ayude. - Afrodita

Respuesta2

Solución Linux.

Hayuna pregunta similar. Residencia enmi respuesta ahíSe me ocurrió un script Bash general para resolver este tipo de problemas. Encontrará el código a continuación. Guárdelo en un archivo llamado findt(u otro) y luego chmod a+x findt. Colóquelo donde $PATHapunta o en otro lugar; supongo que conoce los conceptos básicos, la diferencia, etc.

Invocar findt -hpara aprender la sintaxis. Extracto:

USO

  `findt [OPTION]... FROM TO [ARG]...`

SINOPSIS

Invoca findun comando para enumerar los objetos (archivos, directorios, ...) modificados, modificados o a los que se accede entre FROMy TO(inclusive). FROMy son horas dadas en formato TOde 24 horas HH:MMo ( - ). La fecha de modificación (día) no importa. Si es más tarde , el intervalo incluye la medianoche.H:MM00:0023:59FROMTO

OPCIONES

  `-h`    print this help and exit

  `-m`    use mtime (default)  
  `-c`    use ctime  
  `-a`    use atime (note: understand `noatime` mount option etc.)  
  `-b`    use birth time, `stat -c %w`  
          (useless, see `https://unix.stackexchange.com/a/91200`)

Si se especifica más de uno ?time, sólo importa el último.

  `-p`    use `-print` with `find` (default)  
  `-0`    use `-print0` instead  
  `-d`    use `-delete` with `find` (non-POSIX)  

-dEs silencioso a menos que -po -0también se use.

ARG

Los argumentos siguientes TOse pasan findcomo argumentos iniciales. Especifique rutas y pruebas adicionales (p. ej. -type f) aquí.

La mayor parte del código es para analizar la línea de comando, imprimir ayuda, etc. La parte funcional del script es findla invocación. Es una solución ligeramente generalizada demi respuesta ya mencionada. Está explicado allí para no repetirme aquí.

La herramienta solo imprime nombres, a menos que uses -d. Tenga en cuenta que se utiliza HH:MMdesde simple stat -c %y, etc. ignorando la información de zona horaria; Si hay diferentes zonas horarias involucradas, es posible que desee ajustar la solución.

En tu caso deberías ejecutar algo como:

findt 8:00 15:59 /path/to/dir -type f

Este es el código:

#!/usr/bin/env bash

set -e

myname="${0##*/}"
from=-1
to=-1
property=%y
is_print=0
is_zero=0
is_delete=0
post_args=""
conj=-a

main() {
while [ "${1:0:1}" = "-" ]; do
  options="${1:1}"
  shift
  while [ ${#options} -ne 0 ]; do
    case "$options" in
      h*)
        print_help
        exit 0;;
      m*)
        property=%y;;
      c*)
        property=%z;;
      a*)
        property=%x;;
      b*)
        property=%w;;
      p*)
        is_print=1;;
      0*)
        is_zero=1;;
      d*)
        is_delete=1;;
      *)
        print_error;;
    esac
  options="${options:1}"
  done
done

from=`parse_time "$1"`
to=`parse_time "$2"`
shift 2

[ $from -gt $to ]    && conj=-o
[ $is_delete -eq 0 ] && is_print=1
[ $is_print -eq 1 ]  && post_args="-print"
[ $is_zero -eq 1 ]   && post_args="-print0"
[ $is_delete -eq 1 ] && post_args="$post_args -delete"

find "$@" -exec bash -c '\
hm=`stat -c $4 "$0" | cut -c 12-16`; [ "${#hm}" -eq 0 ] && exit 1 ; \
t=$((60*10#`echo $hm | cut -c 1-2`+10#`echo $hm | cut -c 4-5`)); \
test \( $t -ge $1 \) $3 \( $t -le $2 \)' \
{} $from $to $conj $property \; $post_args
}

parse_time() {
time_string="$1"
[ ${#time_string} -eq 4 ] && time_string="0$time_string"
[[ "$time_string" =~ ^[0-2][0-9]:[0-5][0-9]$ ]] || print_error
{ value=$((60*10#${time_string:0:2}+10#${time_string:3:2})); } 2>/dev/null || print_error
[ $value -ge 1440 ] && print_error
printf '%s' $value
}

print_error() {
cat >&2 << EOF
${myname}: error parsing command line
Try '$myname -h' for more information.
EOF
exit 1
}

print_help() {
cat << EOF
USAGE

    $myname [OPTION]... FROM TO [ARG]...

SYNOPSIS

Invokes \`find' command to list objects (files, directories, ...) modified,
changed or accessed between FROM and TO (inclusive). FROM and TO are times given
in 24-hour HH:MM or H:MM format (00:00 - 23:59). Modification date (day)
does not matter. If FROM is later than TO then the interval includes midnight.

OPTIONs

    -h  print this help and exit

    -m  use mtime (default)
    -c  use ctime
    -a  use atime (note: understand \`noatime' mount option etc.)
    -b  use birth time, \`stat -c %w'
        (useless, see https://unix.stackexchange.com/a/91200)

If more than one ?time is specified, only the last one matters.

    -p  use \`-print' with \`find' (default)
    -0  use \`-print0' instead
    -d  use \`-delete' with \`find' (non-POSIX)

-d is silent unless -p or -0 is also used.

ARGs

Arguments following TO are passed to \`find' as its initial arguments.
Specify paths and additional tests (e.g. \`-type f') here.

EXAMPLES

To list objects in /tmp modified during working hours:
    $myname 7:00 14:59 /tmp

To list and delete big files accessed late at night in /home/foo
    $myname -apd 23:30 4:30 /home/foo -typef -size +640M

LICENCE
        Creative Commons CC0.
EOF
}

main "$@"

Respuesta3

Puede probar el comando en el entorno Linux.

Aencontrar todos los archivos que están modificadoshoy solo

find . -mtime -1 -print

touch -t `date +%m%d0000` /tmp/$$
find /tmefndr/oravl01 -type f -newer /tmp/$$
rm /tmp/$$

  

información relacionada