"rm -rf"等同于 Windows PowerShell?



我已经阅读了适用于Windows?的问题"rm-rf"?。我还尝试了以下命令:

$ rm app
$ rmdir /s /q app
$ rmdir -s -q app
$ rd /s /q app

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

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

[Y] Yes[A]Yes to All[N]No[L]No to All[S]Suspend[?]Help(默认值为"Y"(:

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

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

我该怎么做?

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

rm -r app

如果文件夹包含隐藏或只读文件,请添加-Force参数:

rm -r -fo app

这是的缩写

Remove-Item -Recurse -Force -Path app

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


背景

rmdirrd是可以在命令提示符下调用的命令(不是可执行文件(。默认情况下,rm不可用。例如,如果安装了MinGW环境,这三个术语也可能指向可执行文件。但它们在PowerShell中不可用,因为PowerShell将这些单词用作cmdletRemove-Item:的别名

PS> 'rm', 'rmdir', 'rd' | Get-Command
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           rd -> Remove-Item

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

PS> C:pathtoMinGWmsys1.0binrm.exe

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

rm -r

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

rm -rf

当您将此命令发送到PowerShell时,它将尝试将-rf与以rf开头的参数相匹配,但该参数不存在。在PowerShell中,必须将每个参数分别传递给cmdlet。要传递-Force参数,您必须至少写入-fo,因为还有一个参数-Filter,因此-f将是不明确的。

总之,要在PowerShell中从bash获得等效的rm -rf,您至少需要编写:

rm -r -fo

尝试使用这个:-

rmdir /s directory_name

最新更新