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-Key: 52383668430

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

Printed on: April 27, 2024 at 12:04 o'clock

Member: Looser27
Looser27 Mar 13, 2024 updated at 14:54:08 (UTC)
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
Member: ITguy52
ITguy52 Mar 13, 2024 at 15:01:22 (UTC)
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ß
Mitglied: 12168552861
12168552861 Mar 13, 2024 updated at 15:34:01 (UTC)
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
Member: juxadm
juxadm Mar 13, 2024 at 15:41:47 (UTC)
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 :
Mitglied: 12168552861
Solution 12168552861 Mar 13, 2024 at 15:42:19 (UTC)
Goto Top
Kleiner Tippfehler wurde korrigiert.
Member: juxadm
juxadm Mar 13, 2024 at 15:45:11 (UTC)
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 }
Mitglied: 12168552861
12168552861 Mar 13, 2024 updated at 15:47:22 (UTC)
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 ...
Member: juxadm
juxadm Mar 13, 2024 at 15:55:51 (UTC)
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?
Mitglied: 12168552861
12168552861 Mar 13, 2024 updated at 16:15:55 (UTC)
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
Member: juxadm
juxadm Mar 13, 2024 at 16:25:03 (UTC)
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 ^^ *
Mitglied: 12168552861
12168552861 Mar 13, 2024 updated at 16:50:09 (UTC)
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
Member: ThePinky777
ThePinky777 Mar 14, 2024 updated at 16:44:20 (UTC)
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.