Как проверить наличие скрытых файлов и папок в разделе NTFS, используя python в Linux? - PullRequest
6 голосов
/ 11 апреля 2011

Я использую NTFS раздел на linux машине.Я хочу определить скрытые файлы и папки в моем NTFS разделе на linux, используя python.

. Как мне добиться этого с помощью python.Любой фрагмент кода / ссылки будут оценены.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 14 апреля 2011

Предполагается, что вы используете ntfs-3g для монтирования разделов NTFS в linux (это по умолчанию в большинстве текущих дистрибутивов linux).

Вам потребуется прочитать расширенные атрибуты файла (см. attr (5) ), для этого вы можете использовать pyxattr . Атрибуты NTFS хранятся в расширенном атрибуте system.ntfs_attrib в виде набора флагов, значения которых задокументированы в документации ntfs-3g .

Вот пример кода для чтения и декодирования атрибутов файловой системы 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 голос
/ 14 апреля 2011

Похоже, что в Linux нет интерфейса python для атрибутов NTFS.

NTFS-3G поддерживает атрибуты файла NTFS и предоставляет их для инструментов linux getfattr и setfattr для чтения и установки.

Вы можете использовать Python subprocess, чтобы вызвать getfattr и затем проанализировать вывод.

Примечание: в моей системе Ubuntu мне пришлось установить пакет attr, чтобы получить команды getfattr и setfattr.

0 голосов
/ 18 марта 2015

Если ваш вопрос не ограничивается Python, вы можете попробовать мой пример, реализованный в сценарии оболочки.

Это также основано на атрибуте system.ntfs_attrib_be в NTFS-3G. Если вы просто собираетесь использовать и вам все равно, как это реализовано (в Python или в оболочке), просто скачайте его, установите getfattr и setfattr из вашего дистрибутива и используйте .

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

...