5

ファイルがネットワーク ドライブ上にあるかどうかを確認するにはどうすればよいですか? パスがローカル ディスク上にあるように見えても、パス内のディレクトリの 1 つが実際にはネットワーク ドライブへのシンボリック リンクである状況を含めたいと考えています。

4

1 に答える 1

4

mount または df. その場合は、 os.pathのいくつかの異なる関数を使用して、やりたいことをすべて実行できるはずです 。

これは、ネットワーク ファイル システムであるファイル名とパスを取ります。path.realpath は、シンボリック リンクをリンク先のファイルの絶対パスに変換します。

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

os.walkと一緒に使用して、ディレクトリ構造を移動し、特定のネットワーク ファイル共有上のファイルまたはリンクされているすべてのファイルをキャプチャすることができます。

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
于 2012-11-30T16:58:29.533 に答える