mpanzi
Goto Top

Alte Dateien suchen, aber nur Ordner anzeigen, wo die neueste Datei alt ist

Hallo und ein Frohes neues Jahr zusammen.

Ich kann mir nicht vorstellen, dass es das gibt, aber wollte trotzdem mal in die Runde fragen.

Ich möchte nach alten Dateien suchen, aber die sollen nur angezeigt werden, wenn in dem Ordner/Unterordner keine neueren Dateien enthalten sind.

Ich hoffe, es ist klar, was ich meine.

Hintergrund: Jeder hat ja so seine Ordner, in denen auch alte Dateien drin sind, die aber noch für neuere Dateien benötigt werden, die dann im gleichen Ordner liegen. Ich sag mal, dann "lebt" der Ordner ja noch. Da kann man ja nicht einfach alle alten Dateien ins Archiv verschieben.

Ich suche aber die "toten" Ordner, in denen die neueste Datei z.B. 2 Jahre alt ist oder der letzte Zugriff 2 Jahre zurückliegt. Dateien, die in Ordnern liegen, die auch neuere Dateien enthalten sollen nicht angezeigt werden.

Kennt da zufällig jemand eine Möglichkeit?

Ich habe auch Treesize-Pro, aber auch da habe ich keine passende Funktion gefunden.

Content-ID: 670596

Url: https://administrator.de/forum/alte-dateien-suchen-aber-nur-ordner-anzeigen-wo-die-neueste-datei-alt-ist-670596.html

Printed on: January 14, 2025 at 06:01 o'clock

emeriks
emeriks Jan 09, 2025 updated at 13:34:06 (UTC)
Goto Top
Hi,
mit Powershell
  1. rekursiv alle Ordnerpfade einlesen
  2. je Ordner nicht-rekursiv alle Dateien auflisten, sortieren nach LastWriteTime, das jüngste Datum auswerten
  3. wenn zu alt, dann Ordnerpfad ausgeben

E.
emeriks
emeriks Jan 09, 2025 at 13:32:03 (UTC)
Goto Top
Auf die Schnelle, nicht getestet.
(Get-ChildItem $RootPath -Directory -Recurse).FullName | %{
  $FolderDate = (Get-ChildItem $_ -File | Sort LastWriteTime -Descending)[0].LastWriteTime
  If($FolderDate -lt (Get-Date).AddYear(-2)) {
    $_
  }
}
mpanzi
mpanzi Jan 09, 2025 at 13:36:58 (UTC)
Goto Top
Oh, wow - werde ich demnächst ausprobieren.

Supi, danke schonmal.
TK1987
TK1987 Jan 10, 2025 updated at 10:49:58 (UTC)
Goto Top
Moin,

Zitat von @emeriks:
Auf die Schnelle, nicht getestet.
das Problem wird sein, dass ja auch in Unterordnern noch Dateien neueren Standes liegen könnten.

Ich würde da mit einer kleinen rekursiven Funktion arbeiten:
$root = "D:\Pfad\zum\Quellordner"  

function Get-OldDirs {
  [CmdletBinding()][Alias("GoD")]Param([string]$path)  
  
  $sub = foreach ($dir in [System.IO.Directory]::GetDirectories($path)) {GoD -path $dir}
  $dir = @{
    path = $path
    old  = !($sub.old -Contains $false -or (gci -LiteralPath $path -file|? LastWriteTime -gt (Get-Date).AddYears(-2)))
  }

  if (!$dir.old) {$sub|? old|%{Write-Host $_.path}}
  if ($MyInvocation.InvocationName -eq "GoD") {  
    return $dir
  } elseIf ($dir.old) {Write-Host $path}
}

$ErrorActionPreference = "SilentlyContinue"  
Get-OldDirs $root

Listet dann immer den höchsten alten oder leeren Ordner auf im Baum auf, den es findet.

Gruß Thomas