Wie kann ich mit dem UNIX-Befehl find
nach Dateien suchen, die an einem bestimmten Datum erstellt wurden?
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.
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
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
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
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!
@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.
Mit den Schaltern -atime, -ctime und -mtime können Sie sich dem nähern, was Sie erreichen möchten.