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 $PATH
apunta o en otro lugar; supongo que conoce los conceptos básicos, la diferencia, etc.
Invocar findt -h
para aprender la sintaxis. Extracto:
USO
`findt [OPTION]... FROM TO [ARG]...`
SINOPSIS
Invoca
find
un comando para enumerar los objetos (archivos, directorios, ...) modificados, modificados o a los que se accede entreFROM
yTO
(inclusive).FROM
y son horas dadas en formatoTO
de 24 horasHH:MM
o ( - ). La fecha de modificación (día) no importa. Si es más tarde , el intervalo incluye la medianoche.H:MM
00:00
23:59
FROM
TO
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)
-d
Es silencioso a menos que-p
o-0
también se use.ARG
Los argumentos siguientes
TO
se pasanfind
como 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 find
la 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:MM
desde 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/$$