netzwerkdude
Goto Top

Löschen von Dateien nach bestimmten Zeitmuster

Moin,

Situation: ein selbstgebautes Backupskript erstellt von Dateien täglich backups nach dem muster:

Datei_2017_05_31.file

Nun füllt sich der Ausgabeordner mit dieser Backups über die Zeit, mit hunderten Dateien:
Datei_2017_05_31.file
Datei_2017_05_30.file
Datei_2017_05_29.file
etc.

Um da aufzuräumen würde ich gerne alte Dateien löschen

Einfach:
z.B. mit PowerShell "CreationTime" von "Get-Date" abziehen und z.B. alle Files älter als 30 Tage löschen oder so.

Besser:
"Smart Rotate" - also letzte 7 Dateien bleiben, Dateien älter als 7 Tage 4 Version lassen (also 1x Datei pro Woche), Dateien älter als 30 Tage 12 Version lassen (also 1xDatei pro Monat), und Dateien älter als 1 Jahr eine Datei pro Jahr lassen
(hoffe das klingt verständlich)
Gibts da was fertiges dafür?
Oder muss man selbst das coden (also z.B. diese 4 kategorieren erstellen und die files entsprechend prüfen + löschen)?

PS:
Ist ne windows umgebung, daher beispiele mit PowerShell aber grundsätzlich auch bash, python whatever möglich - geht um die methode an sich

Content-Key: 341453

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

Printed on: April 16, 2024 at 09:04 o'clock

Member: Meierjo
Meierjo Jun 23, 2017 updated at 09:35:54 (UTC)
Goto Top
Hallo

Nimm doch Forfiles.exe

zB
forfiles.exe /P "%programfiles%\............\Logs\" /M *.file /D -30 /C "CMD /C echo @path wird gelöscht"

Löscht alle *.file Dateien im Verzeichnis %programfiles%, die älter als 30 Tage sind

Fofiles /S durchsucht rekursiv (dh inklusive Unterverzeichnisse)

Gruss
Member: NetzwerkDude
NetzwerkDude Jun 23, 2017 at 09:38:36 (UTC)
Goto Top
sicher, aber das ist nur die einfache variante, ich will aber einige ältere behalten (siehe oben unter "besser")
Member: Meierjo
Solution Meierjo Jun 23, 2017 at 09:44:22 (UTC)
Goto Top
Hallo

Dann würde ich zB das Script am Freitag laufen lassen, und vor dem Löschen die aktuellste Datei in einen Unterordner verschieben, oder schreibschützen, damit sie nicht gelöscht werden kann.
Dann das Script am letzten des Monats laufen lassen
und am letzten Tage des Jahres

Gruss
Member: SaschaRD
SaschaRD Jun 23, 2017 at 09:50:53 (UTC)
Goto Top
Hallo,

hier eine Lösung via Powershell:
gci -Path C:\Test | ?{$_.Name -like "Datei_*file" -and $_.CreationTime -lt (Get-Date).AddDays(-7)} | ri -Recurse -Force -EA SilentlyContinue  
Zum Testen kannst du dir das ganze auch ohne Löschbefehl ausgeben:
gci -Path C:\Test | ?{$_.Name -like "Datei_*file" -and $_.CreationTime -lt (Get-Date).AddDays(-7)}  
Gruß, Sascha
Member: NetzwerkDude
NetzwerkDude Jun 23, 2017 updated at 09:54:09 (UTC)
Goto Top
Vielen Dank,
das ist das was ich oben unter "einfach" angedacht hatte, aber interessanter wäre trotzdem die andere lösung - verschieben wie von Maierjo vorgeschlagen ist ne Idee, aber irgendwie nicht soooo elegant face-smile
Member: SaschaRD
Solution SaschaRD Jun 23, 2017 updated at 11:05:41 (UTC)
Goto Top
Hallo,

du kannst das oben stehende Skript beliebig abändern oder erweitern, anstatt Löschen z.B. kopieren, verschieben, umbenennen, kopieren und löschen der alten Dateien, etc.

Kopieren:
gci -Path C:\Test | ?{$_.Name -like "Datei_*file" -and $_.CreationTime -lt (Get-Date).AddDays(-7)} | %{cpi C:\Test\$_. -Destination D:\Test -Recurse -Passthru -EA Stop}  
Verschieben:
gci -Path C:\Test | ?{$_.Name -like "Datei_*file" -and $_.CreationTime -lt (Get-Date).AddDays(-7)} | %{mi $_.Name -Destination D:\Test}  

Empfehle aber bei Backup-Dateien das Kopieren, wenn dies erfolgreich war, dann erst die Dateien entfernen.

Gruß, Sascha
Member: SeriousEE
Solution SeriousEE Jun 23, 2017 at 11:22:50 (UTC)
Goto Top
Hallo,

hier hat sich jemand schon mal Gedanken über so ein Szenario gemacht, allerdings auch mit Verschieben der zu sichernden Dateien:

https://stackoverflow.com/questions/3671657/creating-powershell-script-t ...

Gruss
Member: NetzwerkDude
NetzwerkDude Jun 23, 2017 at 12:22:14 (UTC)
Goto Top
Cool Danke, das script sieht irgendwie größer aus als ich erwartet hätte beim aktuell selber kritzeln auf papier - ich schaus mir mal an bzw. poste ne version von mir falls ich dazu komme...