pcpanik
Goto Top

Dateien die vor 30 Tagen verschoben wurden löschen

Servus,

das Thema wurde natürlich schon öfters behandelt und ich habe verschiedene Lösungsansätze selbst versucht, andere (auch hier im Bord) gefunden und versucht, aber bisher hat es nicht zu dem gewünschten Ergebnis geführt.
Vielleicht übersehe ich etwas, oder mache etwas falsch.

Wir haben hier ein allgemeines Temp Verzeichnis (manche würden es auch Müllhalde nennen), dessen Inhalt von Dateien, die vor 30 Tagen hinzugefügt wurden täglich befreit werden soll.

Mein Problem dabei: Wenn Dateien von anderer Stelle des gleichen Laufwerks in das Temp Verzeichnis verschoben werden, behalten diese ihre Zeiten von

Änderungsdatum / Erstelldatum / Letzter Zugriff

Sind diese bereits älter als 30 Tage, werden sie vom Task also am gleichen Tag gelöscht, an dem sie dort hin verschoben wurden, was natürlich nicht gewünscht ist.

Hatte es zunächst mit nem Batch versucht:

forfiles /P „Pfad\temp“ /S /C „cmd /c @path“ /D -30

Das löscht aber eben alles mit Erstelldatum älter 30 Tage. Ist daher insgesamt ungeeignet.

Dann habe ich es mit dem Tool delage von Horst Schäffer und dem Parameter /accessed (Letzter Zugriff) ausprobiert, was ebenfalls nicht klappte.

An dieser Stelle bemerkte ich dann, dass keiner der genannten Parameter durch das Verschieben von Dateien in das Temp Verzeichnis geändert wird.

Dann habe ich es mit Powershell mit .LastWriteTime versucht, weil ich bin davon ausgegangen bin, dass dies den gewünschten Effekt bringt.

Get-ChildItem „Pfad\Temp“ -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}

Macht es aber auch nicht.
Gibt es noch einen Paramater?
Kopierte Dateien sind kein problem, da sich hier Erstelldatum und letzter Zugriff ändert. Es betrifft nur verschobene.

Meine Idee, Komprimierung auf den Temp Ordner einzuschalten, hilft leider auch nicht. Hatte gehofft, dass dadurch die Datei bei der Ablage neu geschrieben wird.

Content-ID: 42996478043

Url: https://administrator.de/contentid/42996478043

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

3063370895
3063370895 16.11.2023 aktualisiert um 09:57:34 Uhr
Goto Top
Moin,

einmal prüfen ob LastAccess deaktiviert ist mit:

fsutil behavior query disablelastaccess

disablelastaccess {1|0} Deaktiviert (1) oder aktiviert (0) Updates für den Stempel „Letzte Zugriffszeit“ in jedem Verzeichnis, wenn Verzeichnisse auf einem NTFS-Volume aufgeführt sind.
Sie müssen den Computer neu starten, damit dieser Parameter wirksam wird.

MS Docs
-Thomas
8030021182
8030021182 16.11.2023 aktualisiert um 10:03:14 Uhr
Goto Top
Hi.
Hier gibt es auch Lösungen ohne LastAccessTime (falls im FS deaktiviert wurde und man es nicht einschalten möchte/kann/darf)

Gruß Katrin
pcpanik
pcpanik 16.11.2023 um 10:04:10 Uhr
Goto Top
Hi, Danke für Deine Antwort.

Ergebnis: DisableLastAccess 3 , Systemverwaltet, aktiviert

Hieße, ich müsste es auf deaktiviert stellen, damit es nicht mehr disabled ist, richtig?
8030021182
8030021182 16.11.2023 aktualisiert um 10:07:10 Uhr
Goto Top
Zitat von @pcpanik:

Hi, Danke für Deine Antwort.

Ergebnis: DisableLastAccess 3 , Systemverwaltet, aktiviert

Hieße, ich müsste es auf deaktiviert stellen, damit es nicht mehr disabled ist, richtig?

Ja.
fsutil behavior set disablelastaccess 0
Reboot.
pcpanik
pcpanik 16.11.2023 um 10:07:12 Uhr
Goto Top
Super. Danke an euch beide. Ich teste.
Es mit einer DB zu Monitoren ist für „Temp“ overkill. Da würde ich dann her gehen und es nur Samstags leeren und dies dann publik machen. Es ist „Temp“ und nicht mehr. face-smile
emeriks
emeriks 16.11.2023 um 11:10:51 Uhr
Goto Top
Hi,
Du könntest jeden Tag abends/nachts 1x einen Job laufen lassen, welcher in diesem Temp einen Unterordner mit dem aktuellen Datum erstellt und dann alle Dateien und Ordner (mit Ausnahme dieser Datumsordner), welche in diesem Temp sind, in diesen Tages-Unterordner verschiebt.
Danach könntest Du alle Datumsordner durchlaufen und die abgelaufenen samt Inhalt löschen.

E.
emeriks
emeriks 16.11.2023 um 11:15:55 Uhr
Goto Top
Oder Du lässt jeden Tag abends/nachts 1x einen Job laufen lassen, welcher einfach pro Tag ein Textfile mit dem aktuellen Inhalt des Temp Ordners erstellt. Je Zeile Dateipfad, Dateidatum
Dann könntest Du die Textfiles aller abgelaufenen Tage auswerten. Wenn eine in der TXT genannte Datei noch mit genau dem in der Datei genannten Datum existiert, dann wird sie gelöscht.
Wenn Dateien nachträglich noch einmal mit einer aktuelleren Version ersetzt werden, dann würden sie erst dann gelöscht, wenn abgelaufen.

Das wäre zwar die "DB-Variante", aber in schlank.
pcpanik
pcpanik 16.11.2023 um 15:21:16 Uhr
Goto Top
Danke für Deine vorschläge. Ist für „Temp“ zu viel Aufwand. Zudem muss ich ja keine Textdatei erstellen, wenn der letzte Zugriff korrekt vorliegt. Dann greift das Programm delage mit dem Parameter /accessed
Wird sich morgen Zeigen, muss den Server heute Nacht neu starten und werde dann morgen sehen ob es dann klappt.
emeriks
emeriks 16.11.2023 aktualisiert um 15:43:44 Uhr
Goto Top
LastAccessDate ist mit Vorsicht zu genießen!
  1. verursacht das zusätzliche Schreib-IO
  2. verursacht jeder Furz, der auf eine Datei zugreift, eine Aktualisierung. Das kann auch ein AV-Programm sein oder nur ein Dirscan durch den Explorer (wenn Thumbnails aktiviert) o.ä. - Edit: Auch Backup

Aber Du könntest es ggf. zweckentfremden.
Also die Aktualisierung des LastAccessDate deaktiviert lassen (das ist ja Standard) und stattdessen dieses per Script setzen, wenn eine Datei "neu" im Temp gefunden wird.