Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect whether file is on a network drive in python

How can I determine if a file is on a network drive or not? I want to include situations where the path looks like it's on local disk, but one of the directories in the path is in fact a symbolic link to a network drive.

like image 645
pythonic metaphor Avatar asked Oct 06 '22 19:10

pythonic metaphor


1 Answers

I'm going to assume you can get a list of network filesystems and their base mount points, which you could get from parsing mount or df. If that's the case you should be able to do everything you want to do with a few different functions from os.path

This will take a filename and a path that's a network filesystem. The path.realpath will convert symlinks to absolute path of the file they're linked to.

def is_netfile(fname, netfs):
    fname = path.realpath(fname)
    netfs = path.realpath(netfs)
    if path.commonprefix([ netfs, fname ]) == netfs:
        return True
    else:
        return False

You could take his an use it along with os.walk to move through the directory structure and capture all the files that are or link to files on a specific network fileshare

start_dir = '/some/starting/dir'
net1 = '/some/network/filesystem'
remote_files = []

for root, dirs, files in os.walk(start_dir):
    for f in files:
        if is_netfile( path.join(root,f), net1):
            remote_files.append( path.join(root,f))

print remote_files
like image 116
oathead Avatar answered Oct 09 '22 01:10

oathead