相当于 Windows PowerShell 的“rm -rf”?

dea*_*904 0 windows powershell

我已经阅读了Windows 的“rm -rf”等价问题. 而且我还尝试了以下命令:

$ rm app
$ rmdir /s /q app
$ rmdir -s -q app
$ rd /s /q app
Run Code Online (Sandbox Code Playgroud)

以及许多其他变体。它总是提示我:

C:\ThisDirectoryDoesNotExist\app\ 中的项目有子项,并且未指定 Recurse 参数。如果继续,所有子项都将随项目一起删除。你确定你要继续吗?

[Y] 是 [A] 全是 [N] 否 [L] 全否 [S] 暂停 [?] 帮助(默认为“Y”):A

当我选择时A,它会抛出一个错误:

rm:无法删除项目 C:\ThisDirectoryDoesNotExist\app.git\objects\pack\pack-45e426475eb08ff5042bf88556fbedd3956fba53.idx:您没有足够的访问权限来执行此操作。

我该怎么做?

sta*_*tor 13

只需按照建议指定递归参数:

rm -r app
Run Code Online (Sandbox Code Playgroud)

如果文件夹包含隐藏文件,则添加-Force参数:

rm -r -fo app
Run Code Online (Sandbox Code Playgroud)

这是以下的简短形式:

Remove-Item -Recurse -Force -Path app
Run Code Online (Sandbox Code Playgroud)

如果您没有适当的访问权限,那么您当然不能删除它。


背景

rmdir并且rd是您可以在命令提示符下调用的命令(不是可执行文件)。rm默认情况下不可用。例如,如果您安装了 MinGW 环境,则所有三个术语也可能指向可执行文件。但它们在 PowerShell 中不可用,因为 PowerShell 使用这些词作为 cmdlet 的别名Remove-Item

rm -r app
Run Code Online (Sandbox Code Playgroud)

如果您有一些作为可执行文件可用的工具,您仍然可以通过指定它们的完整路径在 PowerShell 中访问它们,例如:

rm -r -fo app
Run Code Online (Sandbox Code Playgroud)

但让我们坚持Remove-Item。由于它是一个 cmdlet,它需要某些参数或开关,例如-Recurse. 您可以在此之前将它们缩写,与其他可能的参数相比,它们保持明确。因此,您可以使用:

rm -r
Run Code Online (Sandbox Code Playgroud)

例如,在 bash 中,您还可以传递两个参数,如下所示:

rm -rf
Run Code Online (Sandbox Code Playgroud)

当您将此命令发送到 PowerShell 时,它会尝试匹配-rf以 开头的参数,而该参数rf不存在。在 PowerShell 中,您必须将每个参数单独传递给 cmdlet。要传递-Force参数,您必须至少编写-fo,因为还有一个参数-Filter,因此-f会产生歧义。

总之,要rm -rf在 PowerShell 中获得与from bash等效的内容,您至少必须编写:

rm -r -fo
Run Code Online (Sandbox Code Playgroud)