Windows中使用Unix命令ls -l及快捷命令ll实现

2023-08-25 13:46:15 浏览数 (4)

ls 命令是 Unix 和类 Unix 的操作系统中列出文件和目录的命令,Windows 中(cmd 命令提示符)是不支持的,它对应的命令是 dir,不过2006年发布的 Windows PowerShell 已经可以使用 ls 命令了。

Windows Powershell 的 ls 命令和 Linux 是有差异的。比如:

  • 文件系统和目录分隔符的差异:Windows PowerShell 使用字母驱动器和反斜杠 ,而 Linux 使用树状结构和正斜杠 /
  • 大小写敏感性的差异:Windows PowerShell 不区分大小写,而 Linux 区分大小写。
  • 选项和参数的差异:Windows PowerShell 和 Linux 支持的选项和参数不同。例如,-Recurse(Powershell) 和 -R(Linux),-Force 和 -f-Hidden 和 -a 等。

ls -l 命令在 Linux 中是用来列出文件和目录的详细信息,包括权限、所有者、大小、修改时间等,也可以直接使用快捷命令 ll

Powershell 中就没有这个参数,不过可以通过组合命令来实现差不多的效果:

代码语言:javascript复制
ls -Path ./ | ft Name, Mode, Length, LastWriteTime

该命令会列出当前目录下的文件和目录的名称、模式(权限)、长度(大小)和最后修改时间。实现下面的效果:

每次要输入这么长的命令,简直要命。这里要用到 PowerShell 的 function 用法:

function 是用来创建可重复使用的代码块,可以指定一个名称,可以有任意数量的参数,可以返回一个或多个值。

语法:

scope 可选,表示 function 的作用范围;

name function 的名称;

parameter function 的参数,可以有多个,可以指定类型;

statement list function 要执行的代码,可以分为 beginprocessend 和 clean 四个部分,分别表示在处理输入之前、处理每个输入、处理输入之后和清理资源时要执行的代码。

代码语言:javascript复制
function [scope:]<name> [ ( [type]$parameter1 [, [type]$parameter2])] { begin {<statement list>} process {<statement list>} end {<statement list>} clean {<statement list>} }

或者

代码语言:javascript复制
function [scope:]<name> { param ( [type]$parameter1 [, [type]$parameter2]) dynamicparam {<statement list>} begin {<statement list>} process {<statement list>} end {<statement list>} clean {<statement list>} }

function 可以在 PowerShell 中直接定义和调用,也可以保存在一个脚本文件或模块中,以便在其他地方使用。

function 可以像 cmdlet 一样使用通用参数和风险管理参数,也可以使用 return 关键字来返回一个值。

示例:

我要用 ll 命令实现上面的效果,可以这样写:

代码语言:javascript复制
function ll($path) {ls -Path $path | ft Name, Mode, Length, LastWriteTime}

也可以简写成:

代码语言:javascript复制
function ll($path) {ls $path | ft Name, Mode, Length, LastWriteTime}

配置文件地址:C:Users<userName>DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1,没有的话新建一个。

更多扩展配置&脚本文件可以参考我之前写的文章:Powershell增强:命令补全、主题美化及Git扩展保姆级教程

分享一些 Powershell ls 命令的常用属性:

-Path:列出文件和目录的路径。

例如,列出 D:w3h5Config 目录下的文件和目录。

代码语言:javascript复制
ls -Path 'D:w3h5Config'

-Filter:列出文件和目录的过滤条件。

例如,列出 D:w3h5 目录下的所有扩展名为 .txt 的文件。

代码语言:javascript复制
ls -Path 'D:w3h5' -Filter '*.txt'

-Recurse:递归地列出子目录中的文件和目录。

例如,列出 D:w3h5 目录及其所有子目录下的文件和目录。

代码语言:javascript复制
ls -Path 'D:w3h5' -Recurse

-Force:包括隐藏或受保护的文件和目录。

例如,列出 D:w3h5 目录下的所有文件和目录,包括隐藏或受保护的。

代码语言:javascript复制
ls -Path 'D:w3h5' -Force

-Name:列出文件和目录的名称。

例如,列出 D:w3h5 目录下的所有文件和目录的名称。

代码语言:javascript复制
ls -Path 'D:w3h5' -Name

当然,我只是个简单的举个例子,提供一个思路,你可以扩展更多功能,让自己的 Powershell 更加强大好用。

参考文献:

Get-ChildItem

本文部分文献整理得益于 ChatGPT 和 微软 New Bing。

未经允许不得转载:w3h5-Web前端开发资源网 » Windows中使用Unix命令ls -l及快捷命令ll实现

1 人点赞