如何防止Python的os.walk跨越挂载点?

joe*_*ker 8 python unix linux

在Unix中,所有磁盘都作为主文件系统中的路径公开,因此os.walk('/')会遍历,例如,/media/cdrom主要硬盘,这对某些应用程序来说是不可取的.

如何os.walk在单个设备上保留?

有关:

Con*_*tin 16

来自os.walkdocs:

当topdown为true时,调用者可以就地修改dirnames列表(可能使用del或slice赋值),而walk()只会递归到名称保留在dirnames中的子目录中; 这可以用来修剪搜索

所以像这样的东西应该工作:

for root, dirnames, filenames in os.walk(...):
  dirnames[:] = [
    dir for dir in dirnames
    if not os.path.ismount(os.path.join(root, dir))]
  ...
Run Code Online (Sandbox Code Playgroud)