**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受回答。
此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
两年前关闭。
Improve this question的
我不经常使用PowerShell和Linux,所以我不确定:ls -al在PowerShell中的“术语”是什么。我试图找到一些东西,但它说在PowerShell中没有等效的命令。看起来很奇怪,所以我想我会问快。
1条答案
按热度按时间bvn4nwqk1#
您正在使用的
ls
Unix实用程序的选项:-a
选项包括 hidden 项,这些项在类Unix平台上是名称以.
开头的文件系统项-l
请求所谓的 long format,该格式生成表格输出,其中包括文件系统项的模式、用户和组所有权、上次写入时间戳、项大小及其名称。PowerShell等效为:
字符串
Get-ChildItem
的-Force
开关在输出中包括 * 隐藏 * 项--尽管与ls
不同,代表目标目录本身及其父目录的.
和..
条目 * 不包括 *(这使得它等效于更有用的-A
ls
选项)。-Name
开关。Get-ChildItem
以 * 当前 * 位置为目标(目录);若要显式指定输入路径,请使用-Path
参数-(用于输入模式)或-LiteralPath
参数-(用于文字(逐字)路径。第一个 * 位置 * 参数(一个没有前缀的参数名称)隐式绑定到-Path
;例如,以下命令针对当前用户的主目录:型
请参阅底部部分的缩短此命令和定义一个方便的“别名”(函数)。
然而,
ls
和Get-ChildItem
之间有一个 * 基本 * 差异**:ls
输出 * 格式化文本 *,因此通常不鼓励解析其输出。Get-ChildItem
输出在终端中呈现的丰富 * 显示格式 * 如何,其实际输出都是System.IO.FileInfo
和System.IO.DirectoryInfo
类型的 * 对象 *,如果在变量中捕获,通过pipeline发送到其他PowerShell注解或在表达式中使用,则可以安全地用于进一步的 * 编程处理 *。(Get-ChildItem -Force).FullName
输出当前目录中所有项目的 * 完整路径 *。为了 * 交互 * 方便(在脚本中不应该这么做),可以使用 * 内置别名 * 和 * 明确的参数名前缀 * 来缩短命令:
型
gci
是Get-ChildItem
的内置别名,其名称遵循PowerShell的命名约定,其中每个所谓的approved verb也有一个批准的1-2个字母 * 别名 * 形式;运行Get-Verb Get
显示批准的Get
动词的别名形式为g
;虽然 * 名词 * 部分没有正式规定,但记住ci
代表ChildItem
应该很容易。-fo
是明确引用-Force
交换机的最短参数名前缀(仅-f
也可以引用-Filter
[1])-Hidden
的-h
或-Directory
的-ad
,但-Force
没有。要查看为给定命令定义的 all 别名(本例中为
Get-ChildItem
),请执行以下操作:型
要将输出限制为 * 内置 * 别名,即排除其他模块或
$PROFILE
脚本定义的别名,请运行pwsh -noprofile { Get-Alias -Definition Get-ChildItem }
(在Windows PowerShell中,使用powershell
而不是pwsh
。*在 Windows 上,您将看到
ls
是 * 另一个 * 内置别名。ls
,但在其他情况下,即where
(隐藏where.exe
)和sc
(仅限Windows PowerShell,隐藏sc.exe
)ls
Unix实用程序和Get-ChildItem
具有如此巨大的不同语法(和行为),将后者公开为ls
可能会引起混淆。因此,建议坚持使用 PowerShell 命令名缩写形式的别名,例如
Get-ChildItem
的gci
和Get-Content
的gc
。虽然这最初对从熟悉的名称(如ls
/dir
和cat
)转换没有帮助,事实上,PowerShell小程序名称及其缩写别名是系统的,并且基于约定,这使得以后更容易记住它们。使用
function
,使用 * 预设参数 * 定义一个方便的“别名”:与POSIX兼容的shell(如
bash
)允许您使用 * 预置 * 参数定义别名,如alias ll='ls -al'
相比之下,aliases in PowerShell仅仅是 * 名称Map *,您需要声明一个 * 函数 *(您可以将其添加到
$PROFILE
文件中,以便在将来的会话中可用):型
或者,类似的
gcih
函数(h
表示 hidden)基于Get-ChildItem
:型
请参阅this answer,了解有关PowerShell中别名与函数的更多信息,包括如何创建更复杂的 Package 函数。
[1]* 概念上 *,它也可以引用
-File
参数,但 * 技术上 * 后者是一个 * 动态 * 参数,特定于PowerShell的文件系统提供程序,因此在模糊性检查期间不会被考虑。