4

I'm writing a python script that uses os.walk() to walk a directory tree. I'd like to give it the ability to skip subdirectories that are mounted to a different file system, the way find -xdev does. Checking through the documentation on os.walk(), I didn't see any argument to pass in for it to do that automatically. Is there something I can use to do the filtering myself? Hopefully something that runs on both Linux and Mac OS X?

Micah
  • 1,527
  • 2
  • 14
  • 14

2 Answers2

7

os.path.ismount()

Community
  • 1
  • 1
anthony
  • 40,424
  • 5
  • 55
  • 128
1

I think you can use a combination of the os.stat call and a filtering of the dirnames given by os.walk to do what you want. Something like this:

import os
for root, dirs, files in os.walk(somerootdir) :
    do_processing(root, dirs, files)
    dirs = [i for i in dirs if os.stat(os.path.join(root, i)).st_dev == os.stat(root).st_dev]

That should modify the list of directories to recurse into, by removing those which do not have the same device.

I have no idea on how it will work on OS X, but it seems to be working here in Linux, after a very little bit of testing.

sykora
  • 96,888
  • 11
  • 64
  • 71
  • dirs list should be modified using del or slice assignment. Otherwise you just rebind local variable dirs to new list instead of changing dirs list used by os.walk. – Constantin Feb 23 '09 at 14:58