试图删除我的 .git 文件夹并且“rm -r .git --force”不起作用

sea*_*mus 5 bash rm

rm -r .git
rm -r .git --force
Run Code Online (Sandbox Code Playgroud)

我得到以下信息,在我输入“是”并移动到下一个后,似乎有一个永无止境的供应。

rm -r .git
rm -r .git --force
Run Code Online (Sandbox Code Playgroud)

Ale*_*vey 16

分析解释:

override r--r--r-- ...?当您尝试使用已删除写访问权限的 rm 命令删除一个或多个文件时,会在 rm 命令的某些版本中看到该消息。

重现:

? mkdir -p foo/{bar,baz} ; touch foo/bar/qux 
? chmod -R -w foo 
? find foo -ls 
4305147410        0 dr-xr-xr-x    4 alexharvey       wheel                 128 24 Mar 18:19 foo
4305147412        0 dr-xr-xr-x    2 alexharvey       wheel                  64 24 Mar 18:19 foo/baz
4305147411        0 dr-xr-xr-x    3 alexharvey       wheel                  96 24 Mar 18:19 foo/bar
4305147413        0 -r--r--r--    1 alexharvey       wheel                   0 24 Mar 18:19 foo/bar/qux
Run Code Online (Sandbox Code Playgroud)

现在,如果您尝试删除这些文件,系统会询问您是否真的要覆盖此文件模式:

? rm -r foo
override r-xr-xr-x  alexharvey/wheel for foo/baz? 
Run Code Online (Sandbox Code Playgroud)

另请注意,如果您使用的是 Mac OS X 或其他 BSD 变体,则似乎是这种情况,那么您--force通过将其添加到命令行的末尾来错误地指定了该参数,该参数将被解释为要删除的附加文件。

但即使我纠正了这一点,-f 仍然无法覆盖 r--r--r--。相反,您会看到:

? rm -rf foo       
rm: foo/baz: Permission denied
rm: foo/bar/qux: Permission denied
rm: foo/bar: Permission denied
rm: foo: Directory not empty
Run Code Online (Sandbox Code Playgroud)

修复:

要解决此问题,请首先恢复文件夹内的写入权限:

? chmod -R +w foo
Run Code Online (Sandbox Code Playgroud)

然后 rm -r 应该可以正常工作:

? rm -r foo
? ls foo 
ls: foo: No such file or directory
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • Unix & Linux Stack Exchange 上的这个相关问题。
  • BSD rm 的源代码在这里


小智 9

如果你想删除 git 中的目录,只需登录sudo

$ sudo rm -r file-name