Im Laufe des Tages geänderte Dateien finden?

Im Laufe des Tages geänderte Dateien finden?

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 findtplatzieren Sie ihn dort, wo Sie $PATHhinzeigen, 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 findeinen Befehl auf, um Objekte (Dateien, Verzeichnisse, ...) aufzulisten, die zwischen FROMund TO(einschließlich) modifiziert, geändert oder aufgerufen wurden. FROMund TOsind Zeiten im 24-Stunden- Format HH:MModer H:MMim ( 00:00- 23:59)-Format. Das Änderungsdatum (Tag) spielt keine Rolle. Wenn FROMes nach Mitternacht liegt TO, 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 ?timeangegeben ist, ist nur die letzte von Bedeutung.

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

-dist stumm, sofern nicht zusätzlich -poder -0verwendet wird.

ARGs

Die folgenden Argumente werden als Anfangsargumente TOan ü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 findder 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:MMfrom plain stat -c %yusw. 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/$$

  

verwandte Informationen