2011-04-11 27 views
6

linux makinede NTFS bölümünü kullanıyorum. python kullanarak linux üzerindeki NTFS bölümümdeki gizli dosyaları ve klasörleri tanımlamak istiyorum.Linux'ta python kullanarak NTFS bölümündeki gizli dosya ve klasörleri nasıl denetlerim?

Bunu python kullanarak nasıl yapabilirim. Herhangi bir kod snippet/link takdir edilecektir.

Teşekkürler.

+0

? Gizli olmayan dosyaları tespit edebilir misiniz? – Johnsyweb

+0

@Johnsyweb: Sadece linux platformundaki gizli dosyaları tanımlamak için kodum var, yani "." Ile başlayan tüm dosyalar/klasörler. (nokta karakteri). Benim gereksinim, NTFS bölümü olan ve linux makineme bağlanabilen bir USB harddisk üzerindeki gizli dosya ve klasörleri tespit etmektir. –

+0

"Gizli" özniteliği olan dosyaları mı kastediyorsunuz? Ya da 'os.walk' tarafından gösterilmeyen bir tür özel dosya mı? – AndiDog

cevap

5

NTFS bölümlerinizi linux'a eklemek için ntfs-3g kullandığınızı varsayarsak (bu varsayılan olarak en güncel linux dağıtımlarında geçerlidir).

Genişletilmiş dosya özelliklerini okumak için (bkz. attr(5)), bunun için pyxattr kullanabilirsiniz. NTFS öznitelikleri ntfs-3g documentation belgesinde belgelenen bir bayrak kümesi olarak system.ntfs_attrib genişletilmiş özniteliğinde saklanır.

soru Python ile sınırlı değilse
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 altında NTFS öznitelikleri için python arabirimi yok gibi görünüyor.

NTFS-3GNTFS file attributes destekler ve okumak ve ayarlamak için Linux araçları getfattr ve setfattr için bunları ortaya çıkarır.

getfattr numaralı telefonu çağırmak için python'un subprocess numarasını kullanabilir ve sonra çıktıyı ayrıştırırabilirsiniz.

Not: ubuntu sistemimde, getfattr ve setfattr komutlarını almak için attr paketini yüklemek zorunda kaldım.

+0

Sadece 'winsys' olarak test etmeden önce sormak istiyorum linux makinede çalışacak? –

+0

@mahendraliya: WinSys paketi Windows API'sinin etrafına sarılır, bu yüzden kesinlikle linux altında kullanılamaz. Cevabımı yeniden yazdım. – lesmana

+0

Genişletilmiş özniteliklerin okunması için bir python modülü varsa, neden harici komutlarla (çok sayıda çağrı için yavaş!) Uğraşmayın?Cevabınız ayrıca bir gerçek hata içerir: ntfs dosya öznitelikleri ntfs-3g tarafından neredeyse en baştan ('system.ntfs_attrib' özniteliği) desteklenir. Yalnızca ntfs-3g-2011.1.15 veya daha sonraki sürümlerde kullanılabilir olan 'system.ntfs_attrib_be' özniteliği,' system.ntfs_attrib''ün sadece endianness sabit bir sürümüdür. – abbot

0

, bu kabuk programı ile yazılmıştır beni örnek deneyebilirsiniz: Burada

okumak ve NTFS dosya sistemi özelliklerini deşifre ve dosyaları filtrelemek için bunları kullanmak için bir örnek kod verilmiştir.

Bu, NTFS-3G'de system.ntfs_attrib_be özniteliğine de dayanmaktadır. 'a giderseniz,'u kullanın ve nasıl uygulandığına (Python veya kabukta) aldırmıyorsanız, sadece indirin, getfattr ve setfattr dağıtımını kendi dağıtımınızdan yükleyin ve kullanın. Şu ana kadar neyin var

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

İlgili konular