Wie kann ich Dateien finden, die zwischen bestimmten Zeitpunkten geändert wurden?

Wie kann ich Dateien finden, die zwischen bestimmten Zeitpunkten geändert wurden?

Ich habe eine Windows 7-Box mit installiertem Cygwin. Ich habe mehrere Ordner mit Dateien in einem einzigen Stammordner. Ich möchte die Liste der Dateien finden, die einen Zeitstempel innerhalb eines bestimmten Datums-/Zeitbereichs haben.

Antwort1

findSie können den Befehl mit der Option verwenden -newerXY.

Ausman find:

-neuerXYReferenz
Vergleicht den Zeitstempel der aktuellen Datei mitReferenz. DerReferenzDas Argument ist normalerweise der Name einer Datei (und einer ihrer Zeitstempel wird für den Vergleich verwendet), es kann aber auch eine Zeichenfolge sein, die eine absolute Zeit beschreibt.XUndYsind Platzhalter für andere Buchstaben, und diese Buchstaben wählen aus, welche Zeit zu welcher gehörtReferenzwird für den Vergleich herangezogen.

Die möglichen Werte fürXUndYsind wie folgt:

  • a - Zeitpunkt des letzten Zugriffs auf die aktuelle Datei oderReferenz
  • B - Geburtszeit der aktuellen Datei oderReferenz
  • c - Zeitpunkt der letzten Inode-Statusänderung der aktuellen Datei oderReferenz
  • m - letzte Änderungszeit der aktuellen Datei oderReferenz
  • T -Referenzist eine Zeichenfolge, die einen Zeitstempel darstellt (nicht gültig fürX)

Xbezieht sich auf die aktuelle Datei undYzumReferenz, daher sollten Sie „m“ für den ersten Buchstaben (Änderungsdatum der aktuellen Datei) und „t“ für den zweiten (Zeitstempel als Zeichenfolge) verwenden. Beispielskript:

find . -type f -newermt "2012-05-01" ! -newermt "2012-05-15"

Es werden alle Dateien gefunden, die zwischen dem 1. und 15. Mai 2012 geändert wurden. Der !(logische NOT) Operator kehrt die Bedeutung des nachfolgenden Arguments um – if -newerXYbedeutet „X ist neuer als Y“, then ! -newerXYbedeutet „X ist älter als Y“.


Eine alternative Möglichkeit, da Sie unter Windows arbeiten, ist die Verwendung von Powershell.Get-ChildItemDas Cmdlet gibt alle Dateien in einem bestimmten Ordner zurück (rekursiv, falls gewünscht) und dasWhere-ObjectMit dem Cmdlet können Sie die Ausgabe anderer Befehle filtern. Beispielskript (vorausgesetzt, das zu durchsuchende Verzeichnis ist das aktuelle Verzeichnis):

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -ge "2012-05-01" -and $_.LastWriteTime -le "2012-05-15" -and !$_.PSIsContainer }

Dies gibt alle Dateien zurück, die zwischen dem 1. und 15. Mai 2012 geändert wurden. Sie können CreationTimeanstelle von verwenden LastWriteTime, um stattdessen nach dem Erstellungszeitpunkt der Datei zu suchen. Der !$_.PSIsContainerFilter gibt nur Dateien zurück ( PSIsContainergilt für Ordner und das Ausrufezeichen ist wieder der logische NOTOperator).

Antwort2

Sie könnenFar-Manager, Find Filemit Filter:Bildbeschreibung hier eingeben

Klicken Sie auf die Filterschaltfläche und drücken Sie , Insertum einen neuen Filter einzufügen:Bildbeschreibung hier eingeben

Geben Sie dem Filter einen beliebigen Namen, geben Sie die Dateimaske ein, aktivieren Sie Date/Time, wählen Sie einen Wert aus change, deaktivieren Sie , Relativeund geben Sie die Datums-/Zeitbereiche ein:Bildbeschreibung hier eingeben

Filters menuKlicken Sie auf „OK“ und spacewählen Sie mit den den Filter aus ( +sollte neben dem Filter erscheinen):Bildbeschreibung hier eingeben

Drücken Sie die Eingabetaste und geben Sie Folgendes ein Find:Bildbeschreibung hier eingeben

Suchergebnisse (in diesem Beispiel Fotos – Maske IMG_*.jpg– Datumsbereich für Juni 2022):Bildbeschreibung hier eingeben

Antwort3

Es ist auch möglich, diese Dateien mit dem GUI-Datei-Explorer zu finden. Einige Beispiele:

datemodified:2015-02-18 08:00..2015-02-18 13:00
datemodified:>2015-02-18 08:00
datemodified:<2015-02-18 08:00

Und etwas weiterführende Literatur: Erweiterte Tipps zur Suche in Windows, Erweiterte Abfragesyntax programmgesteuert verwenden

verwandte Informationen