juxadm
Goto Top

Alle Dateien älter als 10 Jahre anzeigen lassen (und dann löschen)

Moin zusammen,

hat jemand einen Tipp, wie ich (am besten mit Windows-Boardmitteln) alle Dateien eines Verzeichnisses anzeigen lassen, die älter als z.B. 10 Jahre sind?

Achtung: Es handelt sich um eine Menge kleiner Dateien (ca. 15 TB) !

Ich müsste außerdem wissen, wieviel Speicher diese belegen.

Ziel:
Erst anzeigen lassen, dann (später) die Dateien löschen.

Besten Dank vorab,
jupxids

Content-ID: 52383668430

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

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

Looser27
Looser27 13.03.2024 aktualisiert um 15:54:08 Uhr
Goto Top
Hi,

Powershell ist hier Dein Freund:

$Source = "C:\zu_untersuchender_Ordner\"		# Wichtig: muss mit "\" enden  
$Days = 3650					# Anzahl der Tage, nach denen die Dateien geloescht werden
$ext = "*.*","*.log"		# Array - erweitern mit  ,".xyz"   
$log = "$Source$(get-date -format yyyy-mm-dd).txt"  
$DateBeforeXDays = (Get-Date).AddDays(-$Days)

# Start Script
start-transcript $log
write-host "--------------------------------------------------------------------------------------"  
write-host "Entfernen aller Dateien ($ext) im Ordner $Source die aelter sind als $Days Tage."  
write-host "--------------------------------------------------------------------------------------"  
# get-childitem $Source\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose}
get-childitem $Source\* -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose}
stop-transcript

Das Skript stammt ursprünglich mal von Rene Albarus......Wir nutzen das zum Aufräumen unseres XChange-Ordners.
Es werden alle Ordner und Unterordner durchsucht.

Benutzung auf eigenes Risiko! Es wird aber nicht vorher angezeigt. Dazu müsstest Du den Löschbefehl mit -whatif erweitern.

Gruß

Looser
ITguy52
ITguy52 13.03.2024 um 16:01:22 Uhr
Goto Top
Powershell wäre ein Onboard-Mittel. Zum Auflisten gesuchter Dateien folgenden Befehl verwenden:

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-X) -and -not $_.PSIsContainer }

"X" einfach durch die Anzahl der Tage ersetzen. Eine "10" an dieser Stelle gibt nun alle Files aus, welche jünger 10 Tage sind.

Löschen ginge dann wie folgt:

Get-ChildItem -Recurse | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-X) -and -not $_.PSIsContainer } | 
    Remove-Item -Force

Bitte erst testen, bevor Datenverlust entsteht ;)

Gruß
12168552861
12168552861 13.03.2024 aktualisiert um 16:34:01 Uhr
Goto Top
$folder = "E:\Daten"  
$olderthandays = 3650
# -----
$d = (Get-Date).AddDays(-$olderthandays)
$files = Get-ChildItem $folder -File -Recurse | ? LastWriteTime -lt $d
if ($files){
    $size = ($files | measure length -Sum).Sum
    Write-host "$($files.Count) Datei(en) älter als $olderthandays Tage mit Gesamtgröße $('{0:F2}MB' -f ($size/1MB)):`n"  
    $files.Fullname

    If ((Read-Host "Dateien löschen? (J/N)") -match '^j$') {  
        $files | Remove-Item -Force -verbose
    }
}else{
    Write-host "Keine alten Dateien gefunden" -F Gray  
}

Gruß pp
juxadm
juxadm 13.03.2024 um 16:41:47 Uhr
Goto Top
Passt fast. Ich erhalte keine Angabe über die Größe:

Fehler beim Formatieren einer Zeichenfolge: Der Formatbezeichner war ungültig..
In Zeile:8 Zeichen:91
+ ...  $olderthandays Tage mit Gesamtgröße $('{0:D2}MB' -f ($size/1MB)):`n"  
+                                            ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: ({0:D2}MB:String) [], RuntimeException
    + FullyQualifiedErrorId : FormatError

7 Datei(en) älter als 6 Tage mit Gesamtgröße :
12168552861
Lösung 12168552861 13.03.2024 um 16:42:19 Uhr
Goto Top
Kleiner Tippfehler wurde korrigiert.
juxadm
juxadm 13.03.2024 um 16:45:11 Uhr
Goto Top
Geht bei dem Befehl auch ÄLTER als 10 Tage?:

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-X) -and -not $_.PSIsContainer }
12168552861
12168552861 13.03.2024 aktualisiert um 16:47:22 Uhr
Goto Top
Zitat von @juxadm:

Geht bei dem Befehl auch ÄLTER als 10 Tage?:
Sicher, wieso sollte nicht?? ...

RTFM
https://learn.microsoft.com/en-us/dotnet/api/system.datetime.adddays?vie ...
juxadm
juxadm 13.03.2024 um 16:55:51 Uhr
Goto Top
Frage: Wenn ich das komplette script per copy paste auf den server (2008) kopiere per mstsc und dann powershell als admin starte und copy-paste den kompletten scriptblock einfüge, funktioniert es nicht. Lokal bei mir schon.

Er führt die Zeilen nicht aus:

c:\>$folder="c:\temp"
c:\>$olderthandays....
c:\>....

wie kann man das als script block (in einem stück ) starten/ausführen?
12168552861
12168552861 13.03.2024 aktualisiert um 17:15:55 Uhr
Goto Top
Du hast vergessen Enter zu drücken, oder den Pfad an das Zielsystem anzupassen face-big-smile. Das zum Thema "Administrator,de" face-big-smile.
Kapitel 1: Erste Schritte mit PowerShell
juxadm
juxadm 13.03.2024 um 17:25:03 Uhr
Goto Top
Nein! Ich kann kein STRG+c und STRG+v aufm Server machen (klappt nicht im Remote)...
Also habe ich mit rechter Maustaste auf das PowerShell Fenster den Text enigefügt. Leider wird er auch direkt ausgeführt aber nicht im Block, sondern wie beschrieben. face-sad((

*traurig ist es, so unwissend zu sein, glaube er mir ^^ *
12168552861
12168552861 13.03.2024 aktualisiert um 17:50:09 Uhr
Goto Top
Leider wird er auch direkt ausgeführt
Normal, das bezweckst du ja mit dem Copy n Paste. 🙃
Ein Grund warum sowas auch als ganzes aus einer Skript-Datei (*.ps1) ausgeführt wird oder mit einem richtigen Editor wie VS-Code / PS-ISE etc. ...
Copy n Paste is in dem Fall bäh, ... wer weiß was da über remote ankommt ...
*traurig ist es, so unwissend zu sein, glaube er mir ^^ *
Dann lass dir Zeit und komm schreib nicht gleich wegen jede F... hier nen Beitrag. me -> out
ThePinky777
ThePinky777 14.03.2024 aktualisiert um 17:44:20 Uhr
Goto Top
Angenommen
D:\Archiv Hier liegen die Daten
D:\Archiv_Older10 Hier ein Temp Ordner wo ältere Daten hinverschoben werden die älter 10 Jahre sind

Robocopy.exe "D:\Archiv" "D:\Archiv_Older10" /S /E /R:1 /W:1 /MINAGE:3650 /MOV /NP

Mit dem Befehl unter DOS verschiebt er alles was älter 10 jahre (MINAGE:3650 das sind Tage) ist.
Wenns dir nicht passt gehst in den TEMP Ordner rein und schneidest alles aus und fügst es wieder ein in den Original Archiv Ordner.


Und wenn du das per Script komplett mit löschen machen willst:


md "D:\Archiv_Older10"  
Robocopy.exe "D:\Archiv" "D:\Archiv_Older10" /S /E /R:1 /W:1 /MINAGE:3650 /MOV /NP  
rd "D:\Archiv_Older10" /S /Q  

Bedeutet er erstellt erstmal den TEMP Ordner, verschiebt und löscht dann den Temp Ordner samt Inhalt.