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-ID: 341453

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

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

Meierjo
Meierjo 23.06.2017 aktualisiert um 11:35:54 Uhr
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
NetzwerkDude
NetzwerkDude 23.06.2017 um 11:38:36 Uhr
Goto Top
sicher, aber das ist nur die einfache variante, ich will aber einige ältere behalten (siehe oben unter "besser")
Meierjo
Lösung Meierjo 23.06.2017 um 11:44:22 Uhr
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
SaschaRD
SaschaRD 23.06.2017 um 11:50:53 Uhr
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
NetzwerkDude
NetzwerkDude 23.06.2017 aktualisiert um 11:54:09 Uhr
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
SaschaRD
Lösung SaschaRD 23.06.2017 aktualisiert um 13:05:41 Uhr
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
SeriousEE
Lösung SeriousEE 23.06.2017 um 13:22:50 Uhr
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
NetzwerkDude
NetzwerkDude 23.06.2017 um 14:22:14 Uhr
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...