2011-04-11 3 views
6

J'utilise la partition NTFS sur la machine linux. Je veux identifier les fichiers et dossiers cachés sur ma partition NTFS sur linux en utilisant python.Comment vérifier les fichiers et dossiers cachés sur une partition NTFS en utilisant python sur Linux?

Comment puis-je y parvenir en utilisant python. Tout extrait de code/liens serait apprécié.

Merci.

+0

Qu'avez-vous eu jusqu'à présent? Pouvez-vous identifier les fichiers non cachés? – Johnsyweb

+0

@Johnsyweb: J'ai juste le code pour identifier les fichiers cachés sur la plate-forme Linux .. c'est-à-dire tous les fichiers/dossiers commençant par "." (caractère point). Mon exigence est de détecter les fichiers et dossiers cachés sur un disque dur USB qui a une partition NTFS et se connecter à ma machine Linux. –

+0

Voulez-vous dire des fichiers avec l'attribut "caché"? Ou une sorte de fichiers spéciaux non affichés par 'os.walk'? – AndiDog

Répondre

5

En supposant que vous utilisez ntfs-3g pour monter vos partitions NTFS sous linux (c'est par défaut sur la plupart des distributions Linux actuelles). Vous devrez lire les attributs étendus du fichier (voir attr(5)), vous pouvez utiliser pyxattr pour cela. Les attributs NTFS sont stockés dans l'attribut étendu system.ntfs_attrib en tant qu'ensemble d'indicateurs dont les valeurs sont documentées dans ntfs-3g documentation.

Voici un exemple de code pour lire et décoder les attributs du système de fichiers NTFS et de les utiliser pour filtrer les fichiers:

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

Il semble qu'il n'y ait pas d'interface python pour les attributs NTFS sous Linux.

NTFS-3G soutient NTFS file attributes et les exposeraient pour les outils de Linux getfattr et setfattr de lire et écrire.

Vous pouvez utiliser subprocess de python pour appeler getfattr, puis analyser la sortie. Remarque: sur mon système ubuntu, j'ai dû installer le paquet attr pour obtenir les commandes getfattr et setfattr.

+0

je veux juste vous demander avant de tester comme 'winsys' travaillera sur la machine Linux? –

+0

@mahendraliya: Le package WinSys entoure l'API Windows, donc il ne peut certainement pas être utilisé sous linux. J'ai réécrit ma réponse. – lesmana

+0

Pourquoi s'embêter avec des commandes externes (lent pour un grand nombre d'appels!) S'il y a un module python pour lire les attributs étendus?Votre réponse contient également une erreur factuelle: les attributs du fichier ntfs sont supportés par ntfs-3g depuis le tout début (comme l'attribut 'system.ntfs_attrib'). Ce qui est disponible seulement dans ntfs-3g-2011.1.15 ou plus tard est l'attribut 'system.ntfs_attrib_be', qui est juste une version fixée par endianness de' system.ntfs_attrib'. – abbot

0

Si votre question ne se limite pas à Python, vous pouvez essayer mon exemple mis en œuvre dans le script shell.

Ceci est également basé sur l'attribut system.ntfs_attrib_be en NTFS-3G. Si vous allez juste à utilisez et ne vous souciez pas de la façon dont il est mis en œuvre (en Python ou shell), il suffit de télécharger, installer getfattr et setfattr de votre distribution, et l'utiliser.

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

Questions connexes