Heim >Backend-Entwicklung >Golang >Sortieren Sie Elemente in einem Verzeichnis nach absteigender Größe mit Python, PowerShell, C# oder Go
Ein einfaches Programm zum Sortieren aller Elemente in einem Verzeichnis, seien es Dateien oder Ordner, nach absteigender Größe.
Das Sortieren von Elementen in einem Verzeichnis nach absteigender Größe ist nicht so einfach, wie Sie vielleicht denken, unabhängig davon, ob Sie einen grafischen Dateibrowser oder die Befehlszeile verwenden, da Betriebssysteme beim Durchsuchen eines Verzeichnisses nicht die Gesamtgröße des Inhalts eines Verzeichnisses berechnen Baum. Dieser Artikel bietet vollständige Arbeitsprogramme, um dieses Problem auf den meisten Betriebssystemen zu beheben.
Vielleicht kommt Ihnen Folgendes bekannt vor:
Ob für die Arbeit oder für persönliche Projekte, ich organisiere meine digitalen Assets gerne, indem ich ein übergeordnetes Verzeichnis erstelle, sagen wir eines namens „Projekte“, und dort alle Inhalte für die einzelnen Projekte speichere. Wenn ein Projekt klein ist und nicht viel Inhalt umfasst, verwende ich eine einzelne Datei, normalerweise eine Textdatei. Wenn ein Projekt mehr Inhalt umfasst, beispielsweise eine Textdatei sowie ein paar Screenshots, erstelle ich einen Ordner für dieses Projekt und lege alle zugehörigen Assets dort ab. Aus meiner Sicht sind die einzelne Textdatei und der Ordner also in dem Sinne gleichwertig, dass sie jeweils ein Projekt darstellen. Der einzige Unterschied besteht darin, dass der Ordner ein größeres Projekt mit mehr Inhalten darstellt.
Manchmal möchte ich sehen, welches meiner Projekte derzeit das größte ist, welches die meisten Sachen hat. Das passiert normalerweise, weil ich längere Zeit nicht an einem bestimmten Bereich gearbeitet habe. Wenn ich also darauf zurückkomme, möchte ich sehen, welches Projekt den meisten Inhalt hat. Meine Argumentation ist, dass das Projekt mit den meisten Inhalten das vollständigste sein sollte und ich daher wahrscheinlich zuerst mit der Arbeit beginnen sollte, da es am einfachsten zu beenden ist.
Stellen Sie sich beispielsweise ein Verzeichnis mit folgendem Inhalt vor:
Name | Type | Size |
---|---|---|
Huge Project.txt | File | 2.6KB |
Larger Project | Folder | 1.07KB |
0 - Tiny Project | Folder | 0KB |
Basic Project.txt | File | 0.36KB |
Big Project.txt | File | 2.11KB |
Das Sortieren des obigen Verzeichnisses nach absteigender Größe sollte Folgendes ausgeben:
Huge Project.txt 2.6KB Big Project.txt 2.11KB Larger Project 1.07KB Basic Project.txt 0.36KB 0 - Tiny Project 0KB
Dies ist jedoch nicht das, was wir erhalten, wenn wir in grafischen Dateibrowsern unter Windows, Mac und Linux auf die Spaltenüberschrift „Größe“ klicken.
Die Verwendung der Befehlszeile liefert eine Ausgabe, die der gewünschten etwas näher kommt, aber immer noch nicht ganz korrekt ist:
dir /b /o:-d
Ausgabe:
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
Es gibt verschiedene Befehlskombinationen zum Sortieren von Verzeichnisinhalten auf UNIX-basierten Systemen wie Mac und Linux. Die meisten beinhalten die Verwendung von du, sort und ls. Andere Beispiele, die ich online gefunden habe, fügten ebenfalls „find“ und „grep“ hinzu.
Hier sind die, die ich ausprobiert habe:
du -a -h --max- Depth=1 | sort -hr
Ausgabe:
32K . 8.0K ./Larger Project 8.0K ./0 - Tiny Project 4.0K ./Huge Project.txt 4.0K ./Big Project.txt 4.0K ./Basic Project.txt
Die Verwendung des Schalters -S im Befehl ls soll genau das tun, was ich suche: Elemente nach absteigender Größe sortieren.
ls -S
Ausgabe:
'0 - Tiny Project' 'Larger Project' 'Huge Project.txt' 'A - Big Project.txt' 'Basic Project.txt'
Der Ausgang ist immer noch ausgeschaltet. Ich habe versucht, den Schalter -l (lang) hinzuzufügen.
ls -lS
Ausgabe:
total 20 drwx---r-x 2 admin admin 4096 Sep 20 21:49 '0 - Tiny Project' drwx---r-x 2 admin admin 4096 Sep 20 21:49 'Larger Project' -rw-rw-r-- 1 admin admin 2667 Sep 20 21:49 'Huge Project.txt' -rw-rw-r-- 1 admin admin 2164 Sep 20 21:49 'Big Project.txt' -rw-rw-r-- 1 admin admin 368 Sep 20 21:49 'Basic Project.txt'
Die Ausgabe enthält erwartungsgemäß mehr Details, aber die Sortierreihenfolge ist dieselbe wie zuvor.
Während die Ausgabe der verschiedenen Befehle nicht die gewünschte Ausgabe liefert, verdeutlicht sie doch die Grundursache des Problems. Beim Durchsuchen eines Verzeichnisbaums rekursieren Betriebssysteme nicht auf Ordner, um die Gesamtgröße ihres Inhalts zu berechnen. Stattdessen gehen sie davon aus, dass alle Ordner die gleiche feste Größe haben. Normalerweise ist dies die minimale Blockgröße des Dateisystems, üblicherweise 4096 Bytes, 4 KB.
Es muss mindestens ein Dutzend kostenlose Tools geben, die dieses Problem lösen, aber um ehrlich zu sein, habe ich nicht einmal nachgeschaut. Ein Skript/Programm zu schreiben, das das Gleiche tut, und es dann hier zu teilen, schien einfacher zu sein, weniger aufdringlich zu sein, hoffentlich nützlich für andere und auf jeden Fall mehr Spaß zu machen.
Ich habe lange genug geschwafelt. Hier ist der Code:
Huge Project.txt 2.6KB Big Project.txt 2.11KB Larger Project 1.07KB Basic Project.txt 0.36KB 0 - Tiny Project 0KB
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
32K . 8.0K ./Larger Project 8.0K ./0 - Tiny Project 4.0K ./Huge Project.txt 4.0K ./Big Project.txt 4.0K ./Basic Project.txt
'0 - Tiny Project' 'Larger Project' 'Huge Project.txt' 'A - Big Project.txt' 'Basic Project.txt'
Es gibt einige geringfügige Unterschiede zwischen den vier Implementierungen, aber der allgemeine Ansatz für alle vier ist derselbe:
Übergeben Sie in der Befehlszeile als ersten Parameter den Pfad zu dem Verzeichnis, das Sie sortieren möchten. Ich werde nicht alle möglichen Beispiele auflisten, aber hier sind ein paar, vorausgesetzt, Sie haben den Code kopiert und unter dem Dateinamen dir_desc, kurz für „Verzeichnis absteigend“, plus der entsprechenden Dateierweiterung gespeichert:
Python auf Mac oder Linux verwenden:
python3 dir_desc.py
Verwenden von PowerShell unter Windows:
powershell -f dir_desc.ps1
Ich habe meinen ursprünglichen Ansatz in Python auf einige andere Sprachen portiert, sodass es mindestens eine Version gibt, die auf jedem der drei großen Betriebssysteme funktionieren sollte:
Und das ist es. Noch ein Yak, rasiert. Ich hoffe, Sie fanden das hilfreich.
Das obige ist der detaillierte Inhalt vonSortieren Sie Elemente in einem Verzeichnis nach absteigender Größe mit Python, PowerShell, C# oder Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!