Verzeichnisgröße
Im Windows-Explorer bestimmt man die Größe eines Verzeichnisses (und aller Unterordner) über die Eigenschaften. Wenn man allerdings einen raschen Gesamtüberblick braucht, ist es besser eine geeignete App oder ein Skript zu verwenden.
Eine Hörbibliothek wird geordnet. Das Ziel ist es, in einer großen Zahl von Büchern auch systematisch ein Buch zu finden. Dazu werden die Bücher in Sachgebiete eingeordnet, mit dem Ziel, die einzelnen Sachgebiete auf SD-Karten zu speichern, um sie mit einem geeigneten Player abspielen zu können.
Die Kapitel sind derzeit Alltag · AlterUndTod · Anthropologie · Architektur · Astronomie · Beschreibungen · Biografien · Blind · Computer · Das_Beste · Digital · Ernährung · Erotik · Feature · Film · Fußball · Geografie · Geschichte · Gesellschaft · Gesundheit · Globalisierung · Hörfilm · Hörspiel · Kinder · Krimi · Kunst · Literatur · Mathematik · Medizin · Musik · Nationalsozialismus · Natur · Philosophie · Physik · Psychologie · Reisen · Reisen-Berge · Reisen-Gegenden · Reisen-Städte · Religion · Roman · Science Fiction · Soziales · Soziologie · Sprachen · Tiere · Unterhaltung · Unterhaltung-Deutschland · Verhaltensforschung · Weltliteratur · Wirtschaft · Wissenschaft · _OE1 · _unsortiert · Österreich
Dies Ordnung ist keineswegs endgültig. Das Ziel sind etwa gleich große Verzeichnisse mit einer Obergrenze von 30 GB, weil das die größtmögliche Größe für die SD-Karten ist.
App WinDirStat
Mit der App WinDirStat gewinnt man einen raschen Überblick über die Größe der einzelnen Verzeichnisse und auch über die Dateitypen.
Script Tree-Size
Um große Datenmengen ui organisieren, sind Bearbeitungs-Programme praktisch. Hier wird ein Skript vorgestellt, das die Größe der Verzeichnisse berechnet und auch gleichzeitig die gewählte Bezeichnungssystematik berücksichtigt.
Tree-Size-1.ps1
Das folgende Skript bestimmt die Größe des gesamten Hörbuch-Ordners: (siehe How to recursively get the size of all files and folders in Powershell (stackoverflow.com)
$Path = "S:\OneDrive\OneDrive-Silvia\Hörbücher\" $TotalSize = 0 $Objects = Get-ChildItem $Path foreach ($Object in $Objects) { $SubFolderItems = Get-ChildItem $Object.FullName -Recurse -Force ` | Where-Object {$_.PSIsContainer -eq $false} ` | Measure-Object -Property Length -Sum ` | Select-Object Sum $TotalSize += $SubFolderItems.Sum / 1MB } ([string][Math]::Round($totalSize,0)).Padleft(8,' ') + " MB " + "Hörbücherei"
Ausgabe
PS C:\Users\EIZO> S:\OneDrive\Dokumente\PowerShell\aktuell\Tree-Size-0.ps1 532989 MB Hörbücherei
Gewünscht ist aber die Bestimmung aller Ordnergrößen im Hörbuchverzeichnis.
Tree-Size-2.ps1
In einer zweiten Version wird die Größe aller Unterordner bestimmt. Dazu wird das Skript in der Version 1 in eine Funktion verpackt und diese Funktion für jedes Unterverzeichnis aufgerufen.
$Hoerbucherei = "S:\OneDrive\OneDrive-Silvia\Hörbücher\" function GetSize { Param ([string] $Path) $totalSize = 0 $Objects = Get-ChildItem $Path foreach ($Object in $Objects) { $SubFolderItems = Get-ChildItem $Object.FullName -Recurse -Force ` | Where-Object {$_.PSIsContainer -eq $False} ` | Measure-Object -Property Length -Sum ` | Select-Object Sum $TotalSize += $SubFolderItems.Sum / 1MB } ([string][Math]::Round($totalSize,0)).Padleft(8,' ') + " MB " + $Path.Replace($Hoerbucherei,"") } $Directories = Get-ChildItem -Path $Hoerbucherei -Directory foreach ($Directory in $Directories) { GetSize $Directory.FullName }
Ausgabe (gekürzt)
2149 MB Alltag
1241 MB AlterUndTod
2223 MB Anthropologie
105 MB Architektur
142 MB Astronomie
244 MB Beschreibungen
40479 MB Biografien
1522 MB Blind
1329 MB Computer
1822 MB Das_Beste
560 MB Digital
1032 MB Ernährung
7943 MB Erotik
553 MB Feature
582 MB Film
3524 MB Fußball
4 MB Geografie
7316 MB Geschichte
982 MB Gesellschaft
1729 MB Gesundheit
32 MB Globalisierung
1541 MB Hörfilm
657 MB Hörspiel
8272 MB Kinder
24722 MB Krimi
105 MB Kunst
610 MB Literatur
90 MB Mathematik
1068 MB Medizin
185 MB Musik
795 MB Nationalsozialismus
396 MB Natur
6451 MB Philosophie
538 MB Physik
25808 MB Psychologie
16044 MB Reisen
4672 MB Reisen-Berge
5759 MB Reisen-Gegenden
...
Das ist besser, bietet aber keinen Einblick in jene Ordner, die noch weitere strukturelle Unterordnung haben, zum Beispiel bei den Kapiteln Biografie, Unterhaltung und Weltliteratur.
Tree-Size-3.ps1
Daher wird dasselbe Skript rekursiv ausgeführt, es wird also bei jedem Ordner untersucht, ob es weitere Unterordner gibt. Dazu benötigt man Kenntnis über die Bezeichnung der eigentlichen Hörbuchordner.
Jedes Hörbuch ist in einem Ordner mit einer Erweiterung. Erlaubte Erweiterungen sind .cd (Sammlung von Audio-Dateien) und .daisy (Navigierbares Hörbuchformat). Alle Ordner ohne eine solche Erweiterung dienen zur Strukturierung des Hörbuchverzeichnisses. Das Skript bestimmt die Ordnergröße aller Strukturverzeichnisse rekursiv.
$Hoerbucherei = "S:\OneDrive\OneDrive-Silvia\Hörbücher\" function GetSize { Param ([string] $Path, [int] $Level) $totalSize = 0 $Objects = Get-ChildItem $Path foreach ($Object in $Objects) { $SubFolderItems = Get-ChildItem $Object.FullName -Recurse -Force ` | Where-Object {$_.PSIsContainer -eq $False} ` | Measure-Object -Property Length -Sum ` | Select-Object Sum $TotalSize += $SubFolderItems.Sum / 1MB if ($Object.Extension -eq "") { GetSize $Object.FullName ($Level+1) } } $Indent = " " $i=0 for ($i -eq 0; $i -lt $Level; $i++) { $Indent += " " } $Kapitel = $Path.Replace($Hoerbucherei,"") if ($Kapitel.Contains("\")) { $Kapitel = $Kapitel.Substring($Kapitel.LastIndexOf("\")+1) } ([string][Math]::Round($totalSize,0)).Padleft(8,' ') + " MB " + $Indent + $Kapitel } $Directories = Get-ChildItem -Path $Hoerbucherei -Directory foreach ($Directory in $Directories) { GetSize $Directory.FullName 0 }
Diese Version ist nur geringfügig gegenüber Version2 erweitert. Auch die Größe von Unterordnern ohne Erweiterung wird durch rekursiven Aufruf von GetSize
bestimmt. Um die Verschachtelung auf bei der Ausgabe anzuzeigen, wurde eine Variable $Level
eingefügt, die bei jedem rekursiven Aufruf um 1 erhöht wird.
Ausgabe (gekürzt)
PS C:\Users\EIZO> S:\OneDrive\Dokumente\PowerShell\aktuell\Tree-Size-3.ps1 2149 MB Alltag 1241 MB Alter und Tod 2223 MB Anthropologie 105 MB Architektur 142 MB Astronomie 244 MB Beschreibungen 101 MB Anouilh_Jean 591 MB Beckett_Samuel 491 MB Beethoven_Ludwig 261 MB Bernhard_Thomas 496 MB Biden_Joe 248 MB Bohlen_Dieter 60 MB Braille_Louis 153 MB Böhm_Maxi 582 MB Chaplin_Charlie ... 38791 MB Biografien 1522 MB Blind 1329 MB Computer 1822 MB Das_Beste 560 MB Digital 1032 MB Ernährung 7943 MB Erotik 553 MB Feature 582 MB Film 3524 MB Fußball
Diese Ausgabe hat zwei Probleme: Wenn es Unterordner gibt, wird deren Größe mehrfach ermittelt. Ein übergeordnetes Verzeichnis wird erst nach den dazugehörigen Unterordnern angezeigt. Im Bild sieht man die Unterordner der Biografien und erst danach das Verzeichnis Biografie
.
Tree-Size-4.ps1
Daher wird dasselbe Skript rekursiv ausgeführt, es wird also bei jedem Ordner untersucht, ob es weitere Unterordner gibt. Dazu benötigt man Kenntnis über die Bezeichnung der eigentlichen Hörbuchordner.
Jedes Hörbuch ist in einem Ordner mit einer Erweiterung. Ordner ohne Erweiterung dienen zur Strukturierung des Hörbuchverzeichnisses. Erlaubte Erweiterungen sind .cd
(Sammlung von Audio-Dateien) und .daisy
(Navigierbares Hörbuchformat). Alle Ordner ohne eine solche Erweiterung dienen zur Strukturierung des Hörbuchverzeichnisses. Das Skript bestimmt die Ordnergröße aller Strukturverzeichnisse rekursiv und sammelt die errechneten Verzeichnisgrößen (in MB) in einer SortedList
aus dem C#-Framework. Nach der Speicherung aller Verzeichnisse wird das Verzeichnis ausgegeben. Um die Größe der Verzeichnisse besser lesen zu können, wird nach jeweils drei Stellen ein Punkt eingefügt.
$Hoerbucherei = "S:\OneDrive\OneDrive-Silvia\Hörbücher" Clear-Host $SortedList_Tree = New-Object Collections.SortedList $Global:Id = 0 $Global:ShowSize = $False function GetSize { Param ([string] $Path) $TotalSize = 0 $Objects = Get-ChildItem $Path foreach ($Object in $Objects) { $SubFolderItems = Get-ChildItem $Object.FullName -Recurse -Force ` | Where-Object {$_.PSIsContainer -eq $False} ` | Measure-Object -Property Length -Sum ` | Select-Object Sum $TotalSize += $SubFolderItems.Sum / 1MB } return $TotalSize } function CalculateTree { Param ([string] $Path, [int] $Level) $LocalId = $Id $FolderSize = 0 $Files = Get-ChildItem $Path -File foreach ($File in $Files) { Write-Host "Error FileExists: $Path" $FolderSize += (Get-Item $File.FullName).Length } $SubFolders = Get-ChildItem $Path -Directory foreach ($SubFolder in $SubFolders) { $Global:Id++ if ($SubFolder.Extension -eq "") { $FolderSize += CalculateTree $SubFolder.FullName ($Level+1) } else { if ($Global:ShowSize) { $SubFolderSize = GetSize $SubFolder.FullName $FolderSize += $SubFolderSize } $SortedList_Tree.Add($Id,@($SubFolderSize,($Level+1),$SubFolder.Name)) } } $SortedList_Tree.Add($LocalId,@($FolderSize,$Level,$Path.Substring($Path.LastIndexOf("\")+1))) return $FolderSize } function DrawTree { for($d=0; $d -lt $SortedList_Tree.Count; $d++) { $Indent = " " for ($i = 0; $i -lt $SortedList_Tree[$d][1]; $i++) { $Indent += " " } $DirName = $SortedList_Tree[$d][2] $Size = [string][Math]::Round($SortedList_Tree[$d][0],0) if ($Size.Length -gt 6) { $Size = $Size.Substring(0,$Size.Length-6) ` + "." + $Size.Substring($Size.Length-6,3) ` + "." + $Size.Substring($Size.Length-3) } elseif ($Size.Length -gt 3) { $Size = $Size.Substring(0,$Size.Length-3) ` + "." + $Size.Substring($Size.Length-3) } $Size = $Size.Padleft(11,' ') + " MB " if ($Global:ShowSize) { Write-Host ( $Size + $Indent + $DirName) } else { Write-Host ( $Indent + $DirName) } } } CalculateTree $Hoerbucherei 0 0 > $Null DrawTree
Dieses Programm ist schon recht brauchbar.
$Hoerbucherei
ist der PFad zu den Hörbüchern$Global:ShowSize
zeigt die Ordnergröße an (langsam) oder unterdrückt die Anzeige der Ordnergröße (schnell)
Ausgabe (gekürzt – ohne Größenangabe $Global:ShowSize = $False)
... Verhaltensforschung Lorenz_Conrad Er_redete_mit_dem_Vieh.daisy Lorenz_Conrd Das_sogenannte_Böse.daisy Weltliteratur Alighieri_Dante Alighieri_Dante die_goettliche_komoedie.cd Andersen_Hans_Christian andersen daeumelinchen.cd maerchen.cd Austen_Jane Drei Schwestern.cd Balzac_Honore_de Die Frau_von_dreißig_Jahren.cd muench.cd ...
Ausgabe (gekürzt – ohne Größenangabe $Global:ShowSize = $True)
... 469 MB Verhaltensforschung 149 MB Lorenz_Conrad Er_redete_mit_dem_Vieh.daisy 319 MB Lorenz_Conrd Das_sogenannte_Böse.daisy 76.844 MB Weltliteratur 253 MB Alighieri_Dante 253 MB Alighieri_Dante die_goettliche_komoedie.cd 88 MB Andersen_Hans_Christian 22 MB andersen daeumelinchen.cd 66 MB maerchen.cd 29 MB Austen_Jane 29 MB Drei Schwestern.cd 510 MB Balzac_Honore_de 457 MB Die Frau_von_dreißig_Jahren.cd 53 MB muench.cd ...
Wegen der Größe dieses über Jahre gewachsenen Hörbuchverzeichnisses diente dieses Programm auch zum Aufspüren von Bezeichnungsfehlern.
Links
- WinDirStat (Homepage)
- How to recursively get the size of all files and folders in PowerShell (stackoverflow.com)
- Measure-Object: Computing the size of folders and files in PowerShell (dsysops.com)
- Tree-size.zip
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare