web-dev-qa-db-de.com

Wie kann ich mit 'find' nach Dateien suchen, die an einem bestimmten Datum erstellt wurden?

Wie kann ich mit dem UNIX-Befehl find nach Dateien suchen, die an einem bestimmten Datum erstellt wurden?

243
sverrejoh

Max hat darauf hingewiesen, dass dies nicht möglich ist, aber das Überprüfen von Dateien, die geändert oder auf die zugegriffen wird, ist nicht allzu schwierig. Ich habe noch heute ein Tutorial darüber geschrieben. Das Wesentliche ist, -newerXY Und ! -newerXY Zu verwenden:

Beispiel: So finden Sie alle am 7. Juni 2007 geänderten Dateien:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

So finden Sie alle Dateien, auf die am 29. September 2008 zugegriffen wurde:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

Oder Dateien, deren Berechtigung am selben Tag geändert wurde:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

Wenn Sie die Berechtigungen für die Datei nicht ändern, entspricht 'c' normalerweise dem Erstellungsdatum.

305
Arve

find location -ctime time_period

Beispiele für time_period:

  • Vor mehr als 30 Tagen: -ctime +30

  • Vor weniger als 30 Tagen: -ctime -30

  • Vor genau 30 Tagen: -ctime 30

66
Chris

Es sind zwei Schritte, aber ich mache es gerne so:

Erstellen Sie zunächst eine Datei mit einem bestimmten Datum/einer bestimmten Uhrzeit. In diesem Fall ist die Datei am 01.10.2008 um Mitternacht

touch -t 0810010000 /tmp/t

Jetzt können wir alle Dateien finden, die neuer oder älter sind als die obige Datei (nach Änderungsdatum der Datei). Sie können auch - erneut für den Zugriff und - erneut für den geänderten Dateistatus verwenden ).

find / -newer /tmp/t
find / -not -newer /tmp/t

Sie können Dateien auch zwischen bestimmten Daten anzeigen, indem Sie zwei Dateien mit Touch erstellen

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

Dadurch werden Dateien zwischen den beiden Datums- und Uhrzeitangaben gefunden

find / -newer /tmp/t1 -and -not -newer /tmp/t2
45
Mark Biek

Sie könnten dies tun:

find ./ -type f -ls |grep '10 Sep'

Beispiel:

[[email protected] etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
33
Jeff MacDonald

Das kannst du nicht. Die Option -c gibt an, wann die Berechtigungen zuletzt geändert wurden, -a testet die letzte Zugriffszeit und -m testet die Änderungszeit. Das Dateisystem, das von den meisten Linux-Versionen (ext3) verwendet wird, unterstützt keine Aufzeichnung der Erstellungszeit. Es tut uns leid!

12
Max Cantor

@Max: stimmt über die Erstellungszeit.

Wenn Sie jedoch das Argument für die abgelaufenen Tage für einen der Parameter -atime, -ctime Und -mtime Berechnen möchten, können Sie den folgenden Ausdruck verwenden

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Ersetzen Sie "2008-09-24" durch das gewünschte Datum und ELAPSED_DAYS wird auf die Anzahl der Tage zwischen damals und heute gesetzt. (Update: Subtrahiere eins vom Ergebnis, um es an der Datumsrundung von find auszurichten.)

Um eine Datei zu finden, die am 24. September 2008 geändert wurde, lautet der Befehl:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

Dies funktioniert, wenn Ihre Version von find die in der Antwort von @Arve: genannten Prädikate -newerXY Nicht unterstützt.

8
yukondude

Mit den Schaltern -atime, -ctime und -mtime können Sie sich dem nähern, was Sie erreichen möchten.

2
ayaz