Powershell Command: rm -rf

81
“rm”是删除文件的命令,但参数“-rf”代表什么意思?每当我键入“help -rf”时,它会在powershell中打印出所有可用命令的完整列表。“rm -rf”在powershell中输入会发生什么?从我的阅读中,我了解到它会删除驱动器上的所有内容?我不确定。此外,“rm -rf”和“rm -rf /”是否相同?
“rm”命令是用来删除文件的,而参数“-rf”代表强制删除和递归删除,即无需提示就可以删除文件或目录,并且会删除该目录下的所有子目录。在powershell中键入“rm -rf”会立即删除当前所在目录下的所有文件和文件夹,而键入“rm -rf /”则会删除整个系统中的所有文件和文件夹。因此,“rm -rf”和“rm -rf /”并不相同。
3个回答

151

PowerShell 不是 UNIX。 rm -rf 是 UNIX shell 代码,而不是 PowerShell 脚本。

  • 这是 PowerShell 中 rm(缩写为 Remove-Item)的文档。在此查看
  • 这是 UNIX 中 rm 的文档。在此查看

看到区别了吗?

在 UNIX 上,仅使用 rm -rf 是无效的。你通过 rm 来告诉它应该做什么,使用属性 r 表示“递归”,使用属性 f 表示“强制”,但你并没有告诉它要对哪个目标执行这个操作。rm -rf /path/to/delete/ 的意思是,在目录 /path/to/delete/ 及其子目录上,使用 rm(删除)及属性 r(递归)和 f(强制)进行操作。

在 PowerShell 中,正确的等价命令是:

rm C:\path\to\delete -r -fo

请注意,在PowerShell中-f-Filter-Force的歧义性,因此需要使用-fo


1
为了完整起见,PowerShell 的等效命令是 rm \ -r -f。你可以在 PowerShell 中使用缩写参数名称,但不能将它们堆叠。 - JasonMArcher
6
这个答案是不正确的。如果在PowerShell中执行 rm <path> -r -f 命令,但路径不存在,则会抛出异常。而在Unix系统中,如果运行 rm -rf <path> 命令且路径不存在,该命令会成功退出。这两个命令并不相同。 - djhaskin987
4
PowerShell的等效命令(不再)是true。如果你这样做,你会收到一个错误Remove-Item:无法处理参数,因为参数名“f”有歧义。可能的匹配项包括: -Filter -Force. 但是,您可以使用rm C:\path\to\delete -r -fo - Tarulia
1
PowerShell 命令无法正常工作。当我尝试使用 rm path\to\delete -r -fo 时,会出现错误信息:Remove-Item: 无法删除项目 path\to\delete:目录不为空。:'path\to\delete'。我正在使用 PS 版本 7.1.1。 - j.karlsson
1
我找到了为什么(在哪里)PS命令无法工作的原因。如果我尝试在OneDrive处理的文件夹中使用它,它会失败,但在其他情况下它可以正常工作。微软请修复它! - j.karlsson
如果你遇到权限错误,请参考这篇文章:https://dev59.com/U1cP5IYBdhLWcg3w19Xz(关闭可能锁定你要删除的文件/文件夹的应用程序)。 - Brian D

48

你需要使用:

Remove-Item C:\tmp -Recurse -Force

或(简短)

rm C:\tmp -Recurse -Force

那么..在PowerShell中,rm -rf /是什么意思? - BK_
注意了,你一开始没有指定,所以我不确定。 - BK_

4

这是一条行为类似于 rm -rf 的单行代码。 它首先检查路径是否存在,然后尝试删除它。

if (Test-Path ./your_path) { rm -r -force ./your_path}

2
谢谢,这就是我要找的正确答案。很多人忘记了UNIX的-f实际上允许静默地忽略不存在的目录。 - Johan Boulé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接