Wie kann ich "Find" verwenden, um nach Dateien zu suchen, die an einem bestimmten Datum erstellt wurden? [abgeschlossen

StackOverflow https://stackoverflow.com/questions/158044

  •  03-07-2019
  •  | 
  •  

Frage

Wie benutze ich den Unix -Befehl find Suchen Sie nach Dateien, die an einem bestimmten Datum erstellt wurden?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top