如何判断文件是否是给定目录的后代?

mac*_*ann 7 python filesystems

从表面上看,这很简单,我可以轻松地实现它.只需连续调用dirname()来上升文件路径中的每个级别,并检查每个级别以查看它是否是我们正在检查的目录.

但是符号链接会让整个事情陷入混乱.正在检查的文件或目录的路径上的任何目录都可以是符号链接,并且任何符号链接都可以具有指向其他符号链接的任意符号链.此时我的大脑融化了,我不知道该怎么做.我已经尝试编写代码来处理这些特殊情况,但很快就会变得太复杂,我认为我做错了.有一个相当优雅的方式来做到这一点?

我正在使用Python,所以任何提到这样做的库都会很酷.否则,这是一个非常语言中立的问题.

Tho*_*ers 8

使用os.path.realpathos.path.commonprefix:

os.path.commonprefix(['/the/dir/', os.path.realpath(filename)]) == "/the/dir/"
Run Code Online (Sandbox Code Playgroud)

os.path.realpath将展开任何符号链接以及..文件名.os.path.commonprefix有点变幻无常 - 它并不真正测试路径,只是简单的字符串前缀,所以你应该确保你的目录在目录分隔符中结束.如果你不这样做,它将声称/the/dirtwo/filename也在/the/dir