Un ami m'a demandé de faire ce qui suit:
"Trouvez le moyen le plus rapide et le plus simple de trier une liste de répertoires en fonction du DERNIER caractère des noms de fichiers."
Il l'a fait sur Linux en utilisant ce qui suit:
ls | rev | sort | rev
Je voudrais lui montrer l'alternative PowerShell, mais je commence à peine à apprendre PowerShell et je ne peux pas le faire. Alors je triche et je demande votre aide.
powershell
Richard
la source
la source
Réponses:
Malheureusement, Powershell n'a pas de méthode inverse facile et agréable, vous devez donc obtenir la dernière lettre de la chaîne et trier par cela. Voici une façon de procéder:
Comme cela a été souligné, cela triera strictement par la dernière lettre uniquement, alors que moi, la version Linux triera par la dernière et ensuite les lettres suivantes, donc il peut y avoir une meilleure façon de le faire, ou vous devrez peut-être introduire une boucle si vous le voulez comme ça.
la source
Vous pouvez essayer ceci:
la source
Pas aussi court que la version Unix, principalement parce qu'il n'y a pas de fonction String.Reverse () dans le .NET Framework. Fondamentalement, cela fonctionne en disant tri «tri en calculant cette expression sur les arguments d'entrée».
Maintenant, si un shell Unix fait mieux que
pour imprimer tous les fichiers avec le plus gros en premier, je serais intéressé de le voir.
la source
Je suis sûr que quelqu'un peut faire mieux, mais voici une façon qui est entièrement compatible avec lynix. Il a l'avantage de vous laisser une
rev
fonction de chaîne réutilisable pour votre boîte à outils, c'est-à-dire qu'il trie la chaîne entière et pas seulement le dernier caractère:Je pense que le foreach ici montre bien comment les tuyaux PowerShell sont des tableaux et non pas simplement des chaînes comme dans * nix.
Il m'a fallu un peu de temps pour réaliser que je devais utiliser uniquement
$_
et non$_.name
à l'intérieur du 2èmeforeach
. J'ai donc appris quelque chose sur les variations du contenu du tableau d'un canal à l'autre.* Le crédit pour le courage de ma fonction rev va à http://rosettacode.org/wiki/Reverse_a_string#PowerShell
Fonctionne comme lynix:
Des œuvres comme Lynx, mais très, très lentes:
Ne fonctionne pas comme lynix, c'est-à-dire ne trie pas tous les caractères des noms de fichiers; (trie uniquement le tout dernier caractère de la chaîne):
la source
ls | rev | sort | rev
entièrement valide. :-)La variante de Shay est beaucoup plus courte que la réponse acceptée en l'indexant dans la chaîne mais même cela peut être amélioré. Vous pouvez le raccourcir encore plus en excluant les espaces inutiles et en utilisant un alias plus court:
Vous pouvez également utiliser l'
-Name
argument (abrégé) pourGet-ChildItem
:qui renverra directement les chaînes.
Si vous voulez vraiment trier par la chaîne inverse , alors les travaux suivants (mais sont lents):
Vous pouvez l'accélérer si vous avez une limite supérieure sur la longueur du nom de fichier.
la source
la source