如何在Linux中使用Python检查NTFS分区上的隐藏文件和文件夹?

6 投票
3 回答
7415 浏览
提问于 2025-04-16 15:29

我在一台运行 linux 的电脑上使用 NTFS 分区。我想用 python 找出我在这个 NTFS 分区上隐藏的文件和文件夹。

请问我该怎么用 python 来实现这个功能?如果能提供一些代码示例或链接就太好了。

谢谢!

3 个回答

0

如果你的问题不仅限于Python,你可以试试我用shell脚本写的例子。

这个例子也是基于NTFS-3G中的system.ntfs_attrib_be属性。如果你只是想要使用它,而不在乎它是怎么实现的(无论是用Python还是shell),那你只需下载它,安装你系统中的getfattrsetfattr,然后就可以使用了。

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

1

在Linux系统下,似乎没有专门用于处理NTFS属性的Python接口。

NTFS-3G支持NTFS文件属性,并且提供了Linux工具getfattrsetfattr来读取和设置这些属性。

你可以使用Python的subprocess模块来调用getfattr,然后解析它的输出结果。

注意:在我的Ubuntu系统上,我需要安装attr这个软件包,才能使用命令getfattrsetfattr

7

假设你在Linux上使用ntfs-3g来挂载你的NTFS分区(大多数当前的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()

撰写回答