2011-04-11 18 views
6

私は、マシンでNTFSパーティションを使用しています。 NTFSパーティションの隠しファイルとフォルダをlinuxに、pythonを使用して指定したいと思います。Linux上でPythonを使ってNTFSパーティションの隠しファイルとフォルダをチェックする方法は?

pythonを使ってどうすれば実現できますか?すべてのコードスニペット/リンクは高く評価されます。

ありがとうございました。

+0

あなたはこれまでに何を得ていますか?非隠しファイルを特定できますか? – Johnsyweb

+0

@ Johnsyweb:私はちょうどLinuxプラットフォーム上の隠しファイルを識別するコードを持っています。つまり、 "。"で始まるすべてのファイル/フォルダ(ドット文字)。私の必要条件は、NTFSパーティションを持ち、私のLinuxマシンに接続されているUSBハードディスク上の隠しファイルとフォルダを検出することです。 –

+0

"hidden"属性のファイルを意味しますか?あるいは、 'os.walk'で表示されない特別なファイルがありますか? – AndiDog

答えて

5

ntfs-3gを使用してNTFSパーティションをlinuxにマウントしようとしていると仮定します(これは最新のlinuxディストリビューションではデフォルトです)。

ファイル拡張属性(attr(5)を参照)を読む必要があります。pyxattrを使用できます。 NTFS属性は、ntfs-3g documentationに記載されているフラグのセットとしてsystem.ntfs_attrib拡張属性に格納されます。ここで

を読み込み、デコードNTFSファイルシステム属性をしてファイルをフィルタリングするためにそれらを使用するサンプルコードです:

import os, struct, xattr 

# values from http://www.tuxera.com/community/ntfs-3g-advanced/extended-attributes/ 
attributes = ['readonly', 'hidden', 'system', 'unknown', 
       'unknown', 'archive', 'unknown', 'unknown', 
       'temp', 'unknown', 'unknown', 'compressed_dir', 
       'offline', 'not_content_indexed' ] + ['unknown']*18 

def ntfs_attr(path): 
    attr = struct.unpack("i", xattr.get(path, "system.ntfs_attrib"))[0] 
    for shift, attribute in enumerate(attributes): 
     if (attr >> shift) & 1 == 1: 
      yield attribute 

def main(): 
    import sys 
    if len(sys.argv) != 3: 
     print "Usage: %s path attribute" % sys.argv[0] 
     a = set(attributes) 
     a.remove('unknown') 
     print "where attribute is one of:", ' '.join(a) 
     sys.exit(1) 

    path = sys.argv[1] 
    attribute = sys.argv[2] 
    print "Files with %s attribute in %s:" % (attribute, path) 
    for filename in os.listdir(path): 
     fullname = os.path.join(path, filename) 
     if attribute in ntfs_attr(fullname): 
      print fullname 


if __name__ == '__main__': 
    main() 
1

linuxの下にNTFS属性用のpythonインターフェイスがないようです。

NTFS-3GNTFS file attributesをサポートしており、それらを読み込んで設定するLinuxツールgetfattrおよびsetfattrに公開しています。

subprocessを使用してgetfattrを呼び出し、出力を解析することができます。

注:私のubuntuシステムでは、コマンドgetfattrsetfattrを得るために、パッケージattrをインストールしなければなりませんでした。

+0

ちょうど 'winsys' Linuxマシンで動作しますか? –

+0

@mahendraliya:WinSysパッケージはWindows APIをラップしているので、Linuxでは使えません。私は自分の答えを書き直した。 – lesmana

+0

拡張属性を読み込むためのPythonモジュールがある場合、なぜ外部コマンド(大量の呼び出しが遅くなります!あなたの答えには事実上のエラーも含まれています。ntfsファイルの属性はntfs-3gによってほぼ最初から( 'system.ntfs_attrib'属性として)サポートされています。 ntfs-3g-2011.1.15以降でのみ利用可能なのは 'system.ntfs_attrib_be'属性です。これは' system.ntfs_attrib'のエンディアン固定版です。 – abbot

0

あなたの質問はPythonに限定されていない場合、あなたはシェルスクリプトで実装私の例を試すことができます。

これはNTFS-3Gのsystem.ntfs_attrib_be属性にも基づいています。 に行く場合は、を使用してください(Pythonまたはシェルで)どのように実装されているか気にしないで、ダウンロードしてください。getfattrsetfattrをディストリビューションからインストールして使用してください。

https://gist.github.com/Explorer09/ac4bf6838c271a9968b3

関連する問題