web-dev-qa-db-fra.com

Comment produire une sortie de `ls` de type Linux dans PowerShell?

Je ne veux pas la sortie de ls (Get-ChildItem) doit être vertical (une ligne d'une ligne de fichier) dans PowerShell. Je veux que ce soit horizontal (comme une table de Linux). Après avoir recherché sur le Web, je ne sais pas comment faire ça.

Et ls -n | Format-Table ne fonctionne pas. C'est toujours vertical.

Je ne suis pas un organisateur anglais natif, alors pardonnez-moi pour des erreurs de grammaire.

5
Guo Shuai

Je ne suis pas réel sûr pourquoi vous voudriez faire/qu'attendez-y sous Windows, mais il s'agit de près que vous obtiendrez, avec Win Posh Nativement.

collect the path listing, split on the line feed, join with a space delimiter 
(ls -n) -split "`n" -join " "

Le système de fichiers Windows ne répertorie pas de manière native les fichiers de cette façon et gagnez l'objectif de POSH, de ne pas imiter quels autres systèmes de fichiers du système d'exploitation, car il utilisera ce que la seule liste de chaînes, et non la vue de la table dans * Nix . Aucune couleur de couleur de fichier ou de répertoires non plus.

Avant de demander, non, vous ne pouvez pas simplement utiliser le format-table à ce que je montre.

Si vous voulez ce look, vous devez écrire votre propre enveloppe pour LS/GCI. Utilisez POSCHV6 ON * NIX ou OSX ou utilisez un port LS comme indiqué par l'autre réponse. Si vous êtes sur Win10, activez WSL (Bash sur Linux) et utilisez simplement WSL au lieu de gagner chic.

Vous ne pouvez bien sûr sélectionner que des fichiers ou des répertoires.

(ls -n -directory) -split "`n" -join " "

(ls -n -file) -split "`n" -join " "

Vous pouvez utiliser la cmdlet au format, en fonction de la version posh que vous vous trouvez.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.lutility/format-wide?view=powershell-6

ls | Format-Wide -Column 5

Mais vous ne pouvez pas faire, cela échouera, pas de solution de contournement de cette façon.

ls -n | Format-Wide -Column 5

Vous devez faire des choses comme la, car c'est la cmdlet au format qui fait ce travail.

ls | Format-Wide -Column 5 -Property Name
5
postanote

Essayez cette commande:

Get-ChildItem $args -Exclude .*  | Format-Wide Name -AutoSize

et vous pouvez toujours ajouter un alias dans le fichier de profil PowerShell (Microsoft.Powershell_profile.ps1):

function l { Get-ChildItem $args -Exclude .*  | Format-Wide Name -AutoSize }

Ou si vous voulez aussi voir les fichiers cachés:

Get-ChildItem $args -Force | Format-Wide Name -AutoSize

Si vous vous demandez ce qui se passe ici, ce sont des commandes de base PowerShell. Get-ChildItem est la commande de base pour dir et ls. Format-Wide prend une liste et le formate.

1
Matthew Wilcoxson

Si vous avez un sous-système Windows pour Linux installé (WSL), vous pouvez appeler ls directement.

Dactylographie

wsl ls 

Appelle effectivement la commande Linux LS et vous donne la même sortie que vous trouverez sur Linux.

Vous pouvez mettre à jour l'alias "LS" afin d'appeler toujours cela à l'aide de PowerShells "Set-alias". Dans le fichier de profil PowerShell (Microsoft.Powershell_profile.ps1) DO:

function ls_alias { wsl ls --color=auto -hF $args }
Set-Alias -Name ls -Value ls_alias -Option AllScope

Cela vous permet également de passer des paramètres supplémentaires, par exemple, affichez tous les fichiers avec:

ls -a

NOTE Toutefois: vous devrez passer dans un chemin de style UNIX, pas une fenêtre One One ou elle ne sera pas reconnue. Par exemple, ceci:

ls /mnt/c/tmp/my_file

mais non:

ls C:\tmp\my_file
0
Matthew Wilcoxson