仅当目录不是挂载点时才安全删除目录

Har*_*ikk 1 filesystems directory mount unmounting rm

不幸的是,我被迫使用一个软件来处理自动安装和卸载网络卷的能力非常差;它有一种令人讨厌的倾向,即离开挂载点所在的目录,但在稍后再次挂载卷时无法正确处理这种情况(它应该整理但通常没有)。

当然,我正在开发人员那里解决这个问题,但同时我需要做一些事情来自己整理安装点。

所以基本上我需要做的就是删除目录,但只有当它是不是目前一个挂载点(因为我不想被意外删除卷的内容)。

现在,我可以获取目录的设备 ID 并将其与 root 的设备 ID 进行足够轻松的比较,但是如果我使用这样的比较,则可能会出现竞争条件,即 - 如果在检查设备 ID 之间安装了卷和调用rm -r /mnt/point

有没有其他选择?我对使用find命令-xdev选项的可能性很感兴趣,但我不确定我将如何实际提供一个比较点,因为find /mnt/point -xdev目标和它的内容是同一个设备是行不通的。

此外,rmdir假设剩余文件夹始终为空似乎不可靠,因为在某些系统上,挂载点可能有一个文件;例如,macOS 会在.autodiskmounted里面留下一个文件。虽然我可以创建一个此类案例的列表并处理它们,但如果可能的话,拥有一个更通用的解决方案以供将来参考会很好(并希望对其他人有用)。

Bow*_*Red 5

如果目录是挂载点,它将很忙,您不应该重命名它。

$ sudo mv /mnt /mnt.old
mv: cannot move '/mnt' to '/mnt.old': Device or resource busy
Run Code Online (Sandbox Code Playgroud)

如果它只是一个常规目录,您应该能够重命名它。

$ sudo mv /mnt /mnt.old
Run Code Online (Sandbox Code Playgroud)

如果移动成功,则重新创建挂载目录并删除重命名的目录。或者,您可以在删除之前验证重命名的目录是否是您期望的文件系统的一部分。