Wie kann ich "Find" verwenden, um nach Dateien zu suchen, die an einem bestimmten Datum erstellt wurden? [abgeschlossen
Frage
Wie benutze ich den Unix -Befehl find
Suchen Sie nach Dateien, die an einem bestimmten Datum erstellt wurden?
Lösung
Wie von Max hervorgeht, können Sie jedoch nicht so schwierig, geändert oder aufgerufene Dateien zu überprüfen. Ich habe a geschrieben Lernprogramm darüber, so spät wie heute. Die Essenz ist zu verwenden -newerXY
und ! -newerXY
:
Beispiel: Suchen Sie alle am 7. Juni 2007 geänderten Dateien:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
Um alle Dateien zu finden, auf die am 29. September 2008 zugegriffen wird:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
Oder Dateien, bei denen ihre Erlaubnis am selben Tag geändert wurde:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Wenn Sie die Berechtigungen in der Datei nicht ändern, entsprechen "C" normalerweise dem Erstellungsdatum.
Andere Tipps
find location -ctime time_period
Beispiele für time_period:
Vor mehr als 30 Tagen:
-ctime +30
Vor weniger als 30 Tagen:
-ctime -30
Genau vor 30 Tagen:
-ctime 30
Es sind zwei Schritte, aber ich mache es gerne so:
Erstellen Sie zuerst eine Datei mit einem bestimmten Datum/einer bestimmten Uhrzeit. In diesem Fall ist die Datei um Mitternacht 2008-10-01 um Mitternacht
touch -t 0810010000 /tmp/t
Jetzt finden wir alle Dateien, die neuer oder älter als die oben genannte Datei sind (nach Datei geändert werden. Sie können auch verwenden -Anewer für abgerufen und -Cnewer Dateistatus geändert).
find / -newer /tmp/t
find / -not -newer /tmp/t
Sie können sich auch Dateien zwischen bestimmten Daten ansehen, indem Sie zwei Dateien mit Berührung erstellen
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Dies findet Dateien zwischen den beiden Daten und Zeiten
find / -newer /tmp/t1 -and -not -newer /tmp/t2
Sie könnten das tun:
find ./ -type f -ls |grep '10 Sep'
Beispiel:
[root@pbx 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
Du kannst nicht. Der -C -Switch gibt Ihnen mit, wann die Berechtigungen zuletzt geändert wurden, -a die neueste Zugriffszeit und -M testet die Änderungszeit. Das Dateisystem, das von den meisten Aromen von Linux (ext3) verwendet wird, unterstützt keinen "Erstellungszeit". Es tut uns leid!
@Max: hat Recht mit der Erstellungszeit.
Wenn Sie jedoch das Argument für verstrichene Tage für einen der berechnen möchten -atime
, -ctime
, -mtime
Parameter 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 es wird auf die Anzahl der Tage zwischen damals und heute festgelegt. (Aktualisierung: Subtrahieren Sie von dem Ergebnis, um sich an die Einstellung zu bringen find
's DATE RUNDING.)
Um eine am 24. September 2008 geänderte Datei zu finden, wäre der Befehl:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Dies wird funktionieren, wenn Ihre Version von find
unterstützt das nicht -newerXY
Prädikate, die in @Arve: Antwort erwähnt werden.
Mit den Switches für -atime, -ctime und -Mtime können Sie sich dem nähern, was Sie erreichen möchten.
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
Ich habe dieses Scription in einem Skript gefunden, das alle Dateien älter als 14 Tage löscht:
CNT=0
for i in $(find -type f -ctime +14); do
((CNT = CNT + 1))
echo -n "." >> $PROGRESS
rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG
Ich denke, ein kleiner zusätzlicher "Mann finden" und auf der Suche nach den -ctime / -atime usw. werden Ihnen hier helfen.