


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.
Problem
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.
Windows
Mac
Linux
Die Verwendung der Befehlszeile liefert eine Ausgabe, die der gewünschten etwas näher kommt, aber immer noch nicht ganz korrekt ist:
Windows
dir /b /o:-d
Ausgabe:
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
Mac und Linux
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 | Sortieren
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
ls
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.
Grundursache
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.
Lösung
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:
Python
Huge Project.txt 2.6KB Big Project.txt 2.11KB Larger Project 1.07KB Basic Project.txt 0.36KB 0 - Tiny Project 0KB
PowerShell
Larger Project 0 - Tiny Project Huge Project.txt Big Project.txt Basic Project.txt
C-Scharf
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
Gehen
'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:
- Erstellen Sie eine rekursive Funktion, die eine Sammlung von Schlüssel-Wert-Paaren aus Elementname (Datei oder Ordner) und Größe zurückgibt.
- Führen Sie in der Hauptfunktion oder im Hauptblock eine grundlegende Eingabevalidierung durch, und wenn der Benutzer einen gültigen Pfad angegeben hat, führen Sie die rekursive Funktion auf diesem Pfad aus.
- Sortieren Sie die Ausgabe der rekursiven Funktion nach Wert (Größe) in absteigender Reihenfolge.
- Drucken Sie die sortierte Ausgabe auf der Konsole. Jede gedruckte Zeile folgt dem Format: dem Elementnamen, gefolgt von einem Tabulatorzeichen, gefolgt von der Elementgröße geteilt durch 1024 und auf zwei Dezimalstellen gerundet, um die Größe in Kilobyte zu erhalten, gefolgt von „KB“, um die Größeneinheit anzugeben.
Verwendung
Ü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
Unterschiede zwischen Sprachen und Implementierungen
- Python und Go ähneln C und anderen C-ähnlichen Sprachen darin, dass das erste Befehlszeilenargument das zweite Element im args-Array ist. In den .NET-Sprachen PowerShell und C# ist das erste Argument das erste Element im args-Array.
- In PowerShell ist es nicht erforderlich, eine separate rekursive Funktion zu erstellen, da das gewünschte Ergebnis einfacher durch die Verwendung der integrierten Cmdlets Get-ChildItem (gci) und Measure-Object (measure) erreicht werden kann.
- In Go erfordert das Sortieren einer Sammlung von Schlüssel-Wert-Paaren (Map) nach Wert ein paar Zeilen mehr Code als in anderen Sprachen, da die integrierten Sortierfunktionen für die Arbeit mit Arrays/Slices und nicht für Maps konzipiert sind.
- In Go wird das Runden einer Gleitkommazahl auf .Round()-Funktion. Wenn Sie einen C-Hintergrund haben, ist dies wahrscheinlich intuitiv. Für den Rest von uns ist es etwas bizarr, funktioniert aber gut.
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:
- Mac und Linux: Der Python3-Interpreter sollte standardmäßig installiert sein. Wenn nicht, können Sie die Go-Version verwenden. Auf einigen Linux-Systemen ist möglicherweise standardmäßig eine Version von gcc installiert, die Go kompilieren kann, auf den meisten Systemen jedoch nicht, sodass Sie den Go-Compiler herunterladen müssen.
- Windows: Die PowerShell-Version sollte auf Systemen mit Windows 10 oder höher sofort funktionieren. Für ältere Systeme ist die C#-Version wahrscheinlich die bessere Wahl. Sie können den in Windows integrierten C#-Compiler verwenden, um den Code zu kompilieren.
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Golang ist in Bezug auf Leistung und Skalierbarkeit besser als Python. 1) Golangs Kompilierungseigenschaften und effizientes Parallelitätsmodell machen es in hohen Parallelitätsszenarien gut ab. 2) Python wird als interpretierte Sprache langsam ausgeführt, kann aber die Leistung durch Tools wie Cython optimieren.

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

GoisidealforBeginersandSuitableforCloudandNetWorkServicesDuetoitsSimplicity, Effizienz und Konsumfeaturen.1) InstallgoFromTheofficialwebSiteAnDverifyWith'goversion'.2) CreateAneDrunyourFirstProgramwith'gorunhello.go.go.go.

Golang ist für schnelle Entwicklung und gleichzeitige Szenarien geeignet, und C ist für Szenarien geeignet, in denen extreme Leistung und Kontrolle auf niedriger Ebene erforderlich sind. 1) Golang verbessert die Leistung durch Müllsammlung und Parallelitätsmechanismen und eignet sich für die Entwicklung von Webdiensten mit hoher Konsequenz. 2) C erreicht die endgültige Leistung durch das manuelle Speicherverwaltung und die Compiler -Optimierung und eignet sich für eingebettete Systementwicklung.

GoimpactsDevelopmentPositivyThroughSpeed, Effizienz und DiasMlitication.1) Geschwindigkeit: Gocompilesquickandrunseffiction, idealforlargeProjects

Golang und Python haben jeweils ihre eigenen Vorteile: Golang ist für hohe Leistung und gleichzeitige Programmierung geeignet, während Python für Datenwissenschaft und Webentwicklung geeignet ist. Golang ist bekannt für sein Parallelitätsmodell und seine effiziente Leistung, während Python für sein Ökosystem für die kurze Syntax und sein reiches Bibliothek bekannt ist.

Die Leistungsunterschiede zwischen Golang und C spiegeln sich hauptsächlich in der Speicherverwaltung, der Kompilierungsoptimierung und der Laufzeiteffizienz wider. 1) Golangs Müllsammlung Mechanismus ist praktisch, kann jedoch die Leistung beeinflussen.

Golang und C haben jeweils ihre eigenen Vorteile bei Leistungswettbewerben: 1) Golang ist für eine hohe Parallelität und schnelle Entwicklung geeignet, und 2) C bietet eine höhere Leistung und eine feinkörnige Kontrolle. Die Auswahl sollte auf Projektanforderungen und Teamtechnologie -Stack basieren.
