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

标签 python filesystems

从表面上看,这很简单,我可以轻松实现。只需连续调用 dirname() 以上升文件路径中的每一层并检查每一层以查看它是否是我们要检查的目录。

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

我使用的是 Python,因此提及执行此操作的库会很酷。否则,这是一个与语言无关的问题。

最佳答案

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

os.path.commonprefix(['/the/dir/', os.path.realpath(filename)]) == "/the/dir/"

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

关于python - 如何判断文件是否是给定目录的后代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328012/

相关文章:

python - 使用 numpy 在重复信号的一部分内绘制抛物线

python - Pandas:查找 CSV 中接下来每 10 个数据点的平均值

python - 伪造文件系统/虚拟文件系统

php - 如何获取 Storage::put 返回 false 的原因?

linux - 是否有一个Linux文件系统,也许是fuse,它可以将目录大小指定为其内容及其子目录的大小?

python - 关于变量范围?

python - 检查输入 : expected dense_1_input to have 2 dimensions, 但获得形状为 (25000, 700, 50) 的数组时出错

linux -/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO)

python - 操作数无法与形状一起广播 (780,1080) (780,1080,3)

Python 导入模块时遇到问题