如何在 Powershell 中生成类似 Linux 的“ls”输出?

如何在 Powershell 中生成类似 Linux 的“ls”输出?

我不希望ls( Get-ChildItem) 的输出是垂直的(一个文件一行)在 Powershell 中。我希望它是水平的(就像 Linux 中的表格一样)。在网上搜索后,我不知道该怎么做。

不起作用ls -n | Format-Table。它仍然是垂直的。

我不是英语母语者,所以请原谅我的一些语法错误。

答案1

我不太清楚为什么你会想在 Windows 上这样做,或者期待在 Windows 上列出 Linux 文件系统。不过,这已经是你能得到的最接近的结果了,原生 Windows PowerShell 就是这样。

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

Windows 文件系统在设计上不会以这种方式列出文件,而 Windows PowerShell 的目标也不是模仿其他操作系统的文件系统。Windows 文件系统将使用其原生的单个字符串列表,这是设计使然,而不是 *NIX 中的表格视图。文件或目录也不会以颜色突出显示。

在您询问之前,不,您不能只使用 Format-Table 来实现我所展示的效果。如果您想要这种外观,那么您需要为 LS/GCI 编写自己的包装器或在 *NIX 或 OSX 上使用 PoSHv6,或者使用其他回复中提到的“ls”端口,或者如果您使用的是 Win10,请启用 WSL(Linux 上的 Bash)并使用 WSL 而不是 Win PoSH。

当然您也可以只选择文件或目录列表。

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

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

您可以使用 Format-Wide cmdlet,具体取决于您使用的 PoSH 版本。

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

ls | Format-Wide -Column 5

但你不能做的是......

ls -n | Format-Wide -Column 5

...它将会失败,没有其他解决方法。

你必须做这样的事情......工作。

ls | Format-Wide -Column 5 -Property Name

...因为 Format-Wide cmdlet 正在执行此操作

答案2

如果您安装了适用于 Linux 的 Windows 子系统 (WSL),则可以ls直接调用。

打字

wsl ls 

实际上调用 linux ls 命令并给出与 linux 上相同的输出。

您可以更新“ls”别名,以便它始终使用 Powershell“Set-Alias”调用它。在 Powershell 配置文件 (Microsoft.PowerShell_profile.ps1) 中执行以下操作:

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

这还允许您传递其他参数,例如显示所有文件:

ls -a

但请注意:您必须传入 Unix 样式路径,而不是 Windows 样式路径,否则将无法识别。例如,以下路径:

ls /mnt/c/tmp/my_file

但不是:

ls C:\tmp\my_file

答案3

尝试这个命令:

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

并且您随时可以在 Powershell 配置文件 (Microsoft.PowerShell_profile.ps1) 中添加别名:

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

或者如果您也想查看隐藏文件:

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

如果您想知道这里发生了什么,这些是基本的 Powershell 命令。是和的Get-ChildItem基本命令。获取列表并对其进行格式化。dirlsFormat-Wide

答案4

不久前我写了一个包来实现这个功能!你可以在这里阅读安装说明:https://github.com/JRJurman/PowerLS

至于其内部工作原理,它会对目录中的文件和文件夹进行一些解析,然后使用 write-host 和一些颜色标志来生成非常漂亮的输出。请查看 repo 中的自述文件以获取示例。

相关内容