如何删除仅包含“.”的目录和 '..',但 rm 说不为空?

如何删除仅包含“.”的目录和 '..',但 rm 说不为空?

这两个文件是 Office 2011 的产物,会阻止删除“Contents”目录。我该如何删除这些?

sh-3.2# ls -l -a
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 14 23:40 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      1
sh-3.2# cd Contents
sh-3.2# ls -l -a
total 0
drwxrwxr-x@  3 Beef  staff   96 Aug 25  2010 .
drwx------+ 15 Beef  staff  480 Jan 14 23:32 ..

具体来说就是上面的“.”和内容目录中的“..”文件。我在 Mac 终端上使用 bash shell。我已经扎根了。

谢谢!

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# rmdir Contents
rmdir: Contents: Directory not empty
sh-3.2# rmdir -p Contents
rmdir: Contents: Directory not empty

我如何摆脱这个目录?

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# sudo rm -r -f Contents
rm: Contents: Directory not empty

还是不会删除。

答案1

您的目录看起来空,但ls输出表明有一个文件,因为该目录的链接计数是 3 而不是 2(APFS 文件系统上的空目录的链接计数应该为 2)。

这意味着您的文件系统已设法使自己进入不一致的状态,并且您应该fsck在其上运行。在 macOS 上,这是通过“磁盘实用程序”应用程序运行磁盘急救来完成的。如果问题出在您的主启动磁盘(通常称为“Macintosh HD”,至少默认情况下),那么您应该从恢复模式执行此操作。

如果这是我遇到了同样的问题,那么就会最有可能的可以通过首先确保您使用的是最新版本的 macOS(2019 年 3 月之后的某个时间)来解决,然后再在恢复模式下对磁盘运行急救。

Cmd+R重新启动计算机后,按一下即可进入恢复模式。进入恢复模式后,您将有机会从菜单运行“磁盘工具”。

答案2

目录条目...是 20 世纪 70 年代初期的产物,当时 UNIX 确实在小型机器上运行,并且代码也需要很小。

因此,人们创建了到名为.和 的目录的真正硬链接..。这个坏主意会导致空目录的硬链接计数为 2。

今天,这是无稽之谈,自 1988 年以来的 POSIX 定义是这些条目不需要存在。他们的行为必须被效仿。这意味着如果...出现在路径名中,文件系统只需以正确的方式运行即可。

现代文件系统在目录中没有.条目,..并且空目录的硬链接计数不为 2。

ZFS 就是以这种方式实现的,但会假装历史行为以避免编写错误的程序失败。因此,即使这些条目不存在,ZFS 也会交付...with 。readdir()

无论您使用的是现代文件系统还是历史文件系统,都无法删除这些条目。

现在你的链接数为 2...

在历史文件系统上,操作系统通常认为链接计数 > 2 的目录具有子目录,因此无法删除。

如果目录中的链接计数不是列出的扩展属性文件的隐藏“属性目录”的结果,则这一定是文件系统中的错误造成的。

如果您的操作系统不允许使用该程序删除该目录,那么unlink您需要运行.rmrootfsck

答案3

我的第一个猜测是您的文件已被删除,但由正在运行的进程保持打开状态。使用sudo lsof | grep Contents- 这应该为您提供所有打开的文件名称中包含“Contents”一词的 PID。这是输出的前几行,用于显示标题:

$ sudo lsof | head
COMMAND    PID  TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1                  root  cwd       DIR              253,1      4096          2 /
systemd      1                  root  rtd       DIR              253,1      4096          2 /
...

当您摆脱在目录中保持某些内容打开的进程时,您将能够将其删除。

答案4

尝试重新启动。可能你的某个进程仍在Contents目录中打开已删除的文件。重新启动将释放该文件,然后你就可以删除该目录。

相关内容