我需要递归列出一个目录,但我想跳过已经挂载的子目录。 有两种情况:
a)文件系统已挂载两次,如下例所示:
b)文件层次结构的一部分在其他地方重新安装,使用“mount --bind”:
我想列出“/ home / user / tmp”,但只在“test”中下载
“statfs”和“statvfs”不提供任何信息来辨别目录是否已安装两次。
一个解决方案是读取“/ etc / mtab”(作为“find”命令执行)并执行一些检查,但我认为这非常昂贵(每次遇到时都必须读取/ etc / mtab)一个目录;如果只在程序启动时读取该文件,则读取之间可能会发生挂载,因此程序将不准确)。
另一种解决方案是过滤内核事件(通过libudev或Netlink)并仅在发出MOUNT事件时读取/ etc / mtab。
你还有其他建议吗?提前谢谢。
答案 0 :(得分:1)
首先阅读mtab
并不像你想象的那么昂贵,如果它没有改变,如果你经常访问它,linux可能会把它保存在内存中。
但出于您的目的,mtab
可能不会包含您要查找的信息。而是解析/proc/mounts
。