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

nig*_*mal 10 files delete macos

这两个文件是 Office 2011 的人工制品,它们阻止删除“内容”目录。我如何删除这些?

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
Run Code Online (Sandbox Code Playgroud)
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 ..
Run Code Online (Sandbox Code Playgroud)

具体到上面的这些'.' 和目录目录中的“..”文件。我在 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
Run Code Online (Sandbox Code Playgroud)

我如何摆脱这个目录?

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
Run Code Online (Sandbox Code Playgroud)

它仍然不会删除。

Kus*_*nda 31

你的目录看起来空了,但ls输出表明有在有一个文件,因为该目录的链接数是3,而不是2(在一个文件系统有源电力滤波器应该具有2连接计数的空目录)。

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

如果这与我遇到的问题相同,那么在以恢复模式在磁盘上运行急救之前,首先确保您使用的是最新版本的 macOS(2019 年 3 月之后的某个地方),这很可能可以解决。

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

  • @schily 这似乎是 APFS 或 `fsck_apfs`(之前没有修复此类错误)中的错误,已在 2019 年 3 月之后修复。macOS 上的替代文件系统可能是 HFS+,但自 Apple 以来,有一个在 Mojave 更新中,自动将 HFS+ 卷转换为 APFS 卷,我不确定他们是否希望在即将推出的操作系统版本中支持 HFS+ 作为启动卷。据我所知,他们目前不支持用于启动卷的任何其他文件系统,因此选择其他东西(对于 macOS)会比采用 Apple 的建议更麻烦。 (3认同)

sch*_*ily 9

该目录条目.,并..从70年代初制造品,当UNIX没上是微小的,以及需要微型机器和代码运行。

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

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

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

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

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

现在到您的链接数 2....

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

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

如果您的操作系统不允许使用该unlink程序而不是删除该目录rm,则root您需要运行fsck.


j4n*_*53n 5

我的第一个猜测是您的文件已被删除,但由正在运行的进程保持打开状态。使用sudo lsof | grep 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 /
...
Run Code Online (Sandbox Code Playgroud)

当您摆脱在目录中保持打开状态的进程时,您将能够删除它。

  • 删除不包含名称的目录应该没有问题,即使其中已删除的文件当前仍被进程引用。参见例如 [mosvy 对另一个答案的评论](https://unix.stackexchange.com/questions/562173/how-do-i-delete-a-directory-that-c​​ontains-only-and-but-rm-says-不是#comment1045184_562286)。 (2认同)