Ich wurde von einem Freund aufgefordert, Folgendes zu tun:
"Finden Sie den schnellsten und einfachsten Weg, eine Verzeichnisliste nach dem LETZTEN Zeichen der Dateinamen zu sortieren."
Er hat es unter Linux wie folgt gemacht:
ls | rev | sort | rev
Ich würde ihm gerne die Powershell-Alternative zeigen, aber ich fange gerade erst an, Powershell zu lernen, und ich kann es nicht. Also betrüge ich und bitte um deine Hilfe.
powershell
Richard
quelle
quelle
Antworten:
Leider hat Powershell keine schöne einfache Umkehrmethode. Stattdessen müssen Sie den letzten Buchstaben der Zeichenfolge abrufen und danach sortieren. Dies ist eine Möglichkeit, wie ich es getan habe:
Wie bereits erwähnt, wird dies nur nach dem letzten Buchstaben sortiert, während in der Linux-Version nach dem letzten und den nachfolgenden Buchstaben sortiert wird. Daher gibt es möglicherweise eine bessere Möglichkeit, dies zu tun, oder Sie müssen möglicherweise eine Schleife einführen wenn du es so willst.
quelle
Sie können dies versuchen:
quelle
Nicht so kurz wie die Unix-Version, hauptsächlich, weil es in .NET Framework keine String.Reverse () -Funktion gibt. Grundsätzlich funktioniert dies, indem sort "sort durch Berechnung dieses Ausdrucks für die Eingabeargumente" mitgeteilt wird.
Nun, wenn eine Unix-Shell besser als
Um alle Dateien mit der größten zuerst zu drucken, wäre ich interessiert, sie zu sehen.
quelle
Ich bin sicher, dass jemand dies besser kann, aber hier ist eine Möglichkeit, die vollständig mit Lynix kompatibel ist. Es hat den Vorteil, dass Sie eine wiederverwendbare
rev
Zeichenfolgenfunktion für Ihre Toolbox haben, dh die gesamte Zeichenfolge und nicht nur das letzte Zeichen sortiert:Ich denke, die Foreachs hier zeigen gut, wie PowerShell-Pipes Arrays sind und nicht einfach Strings wie in * nix.
Es dauerte eine Weile, bis mir klar wurde, dass ich nur
$_
und nicht$_.name
innerhalb des 2. verwenden mussteforeach
. Ich habe also etwas über Variationen im Array-Inhalt von einer Pipe zur nächsten gelernt.* Gutschrift für den Mut meiner Rev-Funktion geht an http://rosettacode.org/wiki/Reverse_a_string#PowerShell
Funktioniert wie Lynix:
Art von Arbeiten wie Lynix, aber sehr, sehr langsam:
Arbeiten Sie nicht wie Lynix, dh sortieren Sie nicht alle Zeichen der Dateinamen. (sortiert nur das allerletzte Zeichen der Zeichenfolge):
quelle
ls | rev | sort | rev
vollständig für sich allein gültig zu machen . :-)Shays Variante ist viel kürzer als die akzeptierte Antwort, indem sie in den String indiziert, aber selbst das kann verbessert werden. Sie können es noch weiter verkürzen, indem Sie unnötige Leerzeichen ausschließen und einen kürzeren Alias verwenden:
Sie können das (abgekürzte)
-Name
Argument auch verwenden, umGet-ChildItem
:Dies gibt Zeichenfolgen direkt zurück.
Wenn Sie wirklich nach der umgekehrten Zeichenfolge sortieren möchten, funktioniert Folgendes (ist aber langsam):
Sie können es schneller machen, wenn Sie eine Obergrenze für die Länge des Dateinamens haben.
quelle
quelle