Ich muss alle Dateien finden, die nur während der Bürozeiten bearbeitet wurden, da der Computer nachts für freiberufliche Arbeiten verwendet werden könnte. Gibt es eine Möglichkeit, unabhängig vom Datum nach der Tageszeit der Erstellung/Änderung zu suchen? Ich habe sowohl Windows- als auch Linux-Systeme zur Verfügung.
Antwort1
Ja, Sie können nach Änderungsdaten für jedes Programm/jede Datei suchen, indem Sie eine kostenlose Software namensAlles durchsuchen. Sie müssen jedoch im Programm auf die Spalte Datum/Uhrzeit klicken und sie manuell durchsehen. Leider gibt es kein Programm, das dies für Sie erledigt. Ich hoffe, das hilft. - Aphrodite
Antwort2
Linux-Lösung.
Es gibteine ähnliche Frage. Bezogen aufmeine Antwort dortIch habe ein allgemeines Bash-Skript entwickelt, um diese Art von Problemen zu lösen. Den Code finden Sie unten. Speichern Sie ihn in einer Datei mit dem Namen findt
(oder einem anderen) und chmod a+x findt
platzieren Sie ihn dort, wo Sie $PATH
hinzeigen, oder woanders – ich gehe davon aus, dass Sie die Grundlagen, den Unterschied usw. kennen.
Rufen Sie es auf findt -h
, um die Syntax zu lernen. Auszug:
VERWENDUNG
`findt [OPTION]... FROM TO [ARG]...`
ZUSAMMENFASSUNG
Ruft
find
einen Befehl auf, um Objekte (Dateien, Verzeichnisse, ...) aufzulisten, die zwischenFROM
undTO
(einschließlich) modifiziert, geändert oder aufgerufen wurden.FROM
undTO
sind Zeiten im 24-Stunden- FormatHH:MM
oderH:MM
im (00:00
-23:59
)-Format. Das Änderungsdatum (Tag) spielt keine Rolle. WennFROM
es nach Mitternacht liegtTO
, umfasst das Intervall Mitternacht.Optionen
`-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`)
Wenn mehr als eine
?time
angegeben ist, ist nur die letzte von Bedeutung.`-p` use `-print` with `find` (default) `-0` use `-print0` instead `-d` use `-delete` with `find` (non-POSIX)
-d
ist stumm, sofern nicht zusätzlich-p
oder-0
verwendet wird.ARGs
Die folgenden Argumente werden als Anfangsargumente
TO
an übergeben . Geben Sie hier Pfade und zusätzliche Tests (z. B. ) an.find
-type f
Der Großteil des Codes dient zum Parsen der Befehlszeile, zum Drucken der Hilfe usw. Der funktionierende Teil des Skripts ist find
der Aufruf. Es handelt sich um eine leicht verallgemeinerte Lösung vonmeine bereits erwähnte Antwort. Es wird dort erklärt, deshalb werde ich mich hier nicht wiederholen.
Das Tool druckt nur Namen, sofern Sie nicht verwenden -d
. Beachten Sie, dass es HH:MM
from plain stat -c %y
usw. verwendet und Zeitzoneninformationen ignoriert. Wenn unterschiedliche Zeitzonen beteiligt sind, sollten Sie die Lösung anpassen.
In Ihrem Fall sollten Sie etwas wie Folgendes ausführen:
findt 8:00 15:59 /path/to/dir -type f
Dies ist der Code:
#!/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 "$@"
Antwort3
Sie können den Befehl in der Linux-Umgebung ausprobieren.
Zualle geänderten Dateien findennur heute
find . -mtime -1 -print
touch -t `date +%m%d0000` /tmp/$$
find /tmefndr/oravl01 -type f -newer /tmp/$$
rm /tmp/$$