Ich möchte einen "Ablageordner" in einem freigegebenen Windows-Laufwerk erstellen, auf den jeder zugreifen kann. Ich möchte, dass Dateien automatisch gelöscht werden, wenn sie länger als X Tage im Ordner verbleiben.
Es scheint jedoch so, als ob alle Methoden, die ich gefunden habe, das Datum der letzten Änderung, die letzte Zugriffszeit oder das Erstellungsdatum einer Datei verwenden.
Ich versuche, dies zu einem Ordner zu machen, in den ein Benutzer Dateien ablegen kann, um sie für jemanden freizugeben. Wenn hier Dateien kopiert oder verschoben werden, möchte ich, dass die Uhr an dieser Stelle beginnt zu ticken. Das Datum der letzten Änderung und das Erstellungsdatum einer Datei werden jedoch nur aktualisiert, wenn die Datei tatsächlich geändert wird. Die letzte Zugriffszeit wird zu häufig aktualisiert. Es scheint, dass nur das Öffnen eines Verzeichnisses im Windows Explorer die letzte Zugriffszeit aktualisiert.
Kennt jemand eine Lösung dafür? Ich denke, dass das tägliche Katalogisieren des Hashs von Dateien und das anschließende Ablaufen von Dateien auf der Grundlage von Hashes, die älter als ein bestimmtes Datum sind, eine Lösung sein kann. Das Erstellen von Hashes von Dateien kann jedoch zeitaufwändig sein.
Irgendwelche Ideen wäre sehr dankbar!
Hinweis:
Ich habe hier bereits eine ganze Reihe von Antworten gelesen ... Ich habe mir File Server Resource Monitor, Powershell-Skripte, Batch-Skripte usw. angesehen. Sie verwenden weiterhin die letzte Zugriffszeit, die letzte Änderungszeit oder die Erstellungszeit ... welche, wie beschrieben, nicht die oben genannten Bedürfnisse erfüllen.
tmpwatch
.Antworten:
Wir haben eine Kombination aus einem Powershell-Skript und einer Richtlinie verwendet. Die Richtlinie gibt an, dass der Benutzer einen Ordner in der Drop_Zone-Freigabe erstellen und anschließend alle gewünschten Dateien in diesen Ordner kopieren muss. Wenn der Ordner 7 Tage alt ist (mit CreationTime), wird er vom Powershell-Skript gelöscht.
Ich habe dem Powershell-Skript auch einige Protokollierungsschritte hinzugefügt, damit wir überprüfen können, ob es funktioniert, und Schattenkopien aktiviert, nur um die völlig Unfähigen vor sich selbst zu retten.
Hier ist das Skript ohne das gesamte Protokollierungsmaterial.
quelle
Wenn Sie NTFS annehmen können, können Sie einen Schlüssel (Guid) in einen alternativen Stream der Datei schreiben. Plus das Datum, so dass Sie im Grunde die Datenbank in den Dateien speichern können.
Weitere Informationen finden Sie unter
http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx
Grundsätzlich können Sie zusätzlichen Inhalt in einem separaten Stream speichern, der durch einen speziellen Namen codiert ist.
quelle
Sie können IO.FileSystemWatcher verwenden, mit dem Sie einen Ordner auf neu erstellte Dateien "überwachen" können. Hier sind die Teile, die Sie benötigen, um diese Arbeit zu machen.
Diese Variablen konfigurieren den zu überwachenden Pfad und einen Filter zur Feinabstimmung der zu verfolgenden Dateien:
Hiermit werden die Parameter für den Ordner festgelegt, der überwacht werden soll, und die Aktionen, die ausgeführt werden sollen, wenn das Ereignis eintritt. Grundsätzlich setzt dies die LastWriteTime für jede Datei zurück, wie sie geschrieben wurde:
Das Ereignis kann bei Bedarf folgendermaßen abgemeldet werden:
Schließlich können Sie dies einmal täglich ausführen, um die alten Dateien zu bereinigen:
Das sollte alles sein, was Sie brauchen ...
quelle
Es ist schon eine Weile her, aber ich habe eine relativ einfache Methode entwickelt, um dies zu beheben.
Ich würde alle Dateien berühren, die dem Ablageverzeichnis hinzugefügt wurden (überwacht über ein Dienstprogramm zur Ressourcenüberwachung) und das Datum der letzten Änderung auf das Datum setzen, das dem Ordner hinzugefügt wurde.
Ich könnte dann das Datum der letzten Änderung verwenden, um alle Dateien zu löschen, die gealtert werden müssen. Dies hat auch den Vorteil, dass der Countdown zurückgesetzt wird, wenn jemand die Datei wirklich aktualisiert.
quelle
Es gibt keine Möglichkeit, sich auf die Daten zu verlassen, an denen eine Datei kopiert oder in einen Ordner verschoben wurde. Windows kann es zwischen Dateisystemen, Laufwerken, Netzwerkfreigaben usw. beibehalten. Möglicherweise können Sie einen Fehler mit einem Linux-Dateiserver beheben oder verhindern, dass Benutzer Dateien mithilfe von FTP oder einem webbasierten Upload-System direkt kopieren.
Wenn Sie damit einverstanden sind, dass Benutzer die Dateien nach dem Hochladen nicht ändern können, haben Sie möglicherweise separate Upload- und Zugriffsordner sowie ein Skript, mit dem Dateien zwischen ihnen verschoben und neu datiert werden. Es hört sich jedoch so an, als ob Sie möchten, dass die Benutzer die Dateien direkt ändern können.
Eine einfache, wenn auch etwas abgedroschene Lösung wäre es, mit den Daten herumzuspielen. Ich würde zwei Skripte schreiben:
Stündliches Date Changer-Skript
Lassen Sie ein Skript etwa einmal pro Stunde in Ihrer bevorzugten Sprache ausführen, um Folgendes zu tun:
In Powershell würde es ungefähr so aussehen:
Wenn Sie dieses Skript heute (27. Mai) ausführen, wird das Änderungsdatum aller Dateien auf den 1. Juni 1994 festgelegt - genau vor 356 * 20 Tagen. Da nur Dateien geändert werden, die neuer sind als der Wert "$ before", werden Dateien, die bereits in der Vergangenheit liegen, nicht berührt.
Bereinigungsskript
Das Bereinigungsskript würde jede Nacht ausgeführt und:
Ich werde das Skript für diesen Teil nicht schreiben - es gibt viele Dienstprogramme, mit denen Sie Dateien löschen können, die älter als ein bestimmtes Datum sind. Wählen Sie, was Sie möchten. Der wichtige Teil ist, nach Dateien zu suchen, die 7300 + X Tage alt sind, wobei X die Anzahl der Tage angibt, die Sie seit der letzten Änderung aufbewahren möchten.
Vorteile
Dies hat einige Vorteile gegenüber den anderen Antworten hier:
Das einzige Problem, das ich sehen kann, ist, ob Leute eine Datei, die vor 20 Jahren zuletzt geändert wurde, in den Ablageordner kopieren. Ich denke, in den meisten Szenarien ist das wahrscheinlich kein großes Problem, aber es könnte auftauchen.
quelle
Sie können das Hinzufügen von Dateien zur Dropbox über eine Webseite mit einem "Upload" -IFRAME formalisieren. Der Benutzer könnte dann die Datei "posten", wodurch ein PHP / ASP-Job auf dem Server aufgerufen wird, der die Datei aufnimmt und an der Pucker-Position ablegt. Das PHP / ASP kann eine beliebige Anzahl von Index- / Analyseoperationen ausführen.
quelle
Ich würde ein Skript erstellen, das alle fünf Minuten als geplante Aufgaben ausgeführt wird und zwei Dinge ausführt.
quelle
Es gibt einen Mechanismus zum Markieren von Dateien, das Archivbit. Es gibt es seit den Anfängen von DOS und es ist sowohl auf FAT als auch auf NTFS vorhanden.
Grundsätzlich ist für jede Datei das Archivbit standardmäßig gesetzt. Wenn Sie eine Datei mit dem Archivbit in Ihrem Ablageordner sehen, (1) löschen Sie dieses Bit und (2) setzen Sie das Datum auf heute. Wenn Sie eine Datei ohne dieses Bit und mit einem Datum <= 7 Tage in der Vergangenheit sehen, löschen Sie sie.
Wenn ein Benutzer in die Datei schreibt, während sie sich im Ablageordner befindet, wird das Archivbit erneut gesetzt, sodass auch die Lebensdauer auf 7 Tage zurückgesetzt wird. Immerhin handelt es sich um eine neue Datei.
Sie können FileSystemWatcher jetzt problemlos verwenden. Alle Probleme (wie doppelte Ereignisse, Verlust detaillierter Informationen durch Pufferüberlauf) spielen keine Rolle mehr, da alle relevanten Informationen in den Dateimetadaten enthalten sind.
quelle