我正在使用
请问如何使用
谢谢。
linux
机器上的NTFS
分区。我想使用python
识别在NTFS
分区中隐藏的文件和文件夹。请问如何使用
python
实现此功能?如果有代码片段/链接将不胜感激。谢谢。
linux
机器上的NTFS
分区。我想使用python
识别在NTFS
分区中隐藏的文件和文件夹。python
实现此功能?如果有代码片段/链接将不胜感激。您需要读取文件扩展属性(请参见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()
在Linux下似乎没有Python接口支持NTFS属性。
NTFS-3G支持NTFS文件属性,并将其公开为Linux工具getfattr
和setfattr
的读取和设置方式。
您可以使用Python的subprocess
来调用getfattr
,然后解析输出。
注意:在我的Ubuntu系统上,我需要安装attr
软件包才能获得命令getfattr
和setfattr
。
system.ntfs_attrib
属性)。仅在ntfs-3g-2011.1.15或更高版本中可用的是system.ntfs_attrib_be
属性,它只是system.ntfs_attrib
的字节序固定版本。 - abbotsystem.ntfs_attrib_be
是用于命令getfattr
和setfattr
的,这正是我在我的答案中写的。 - Lesmana如果你的问题不仅限于Python,你可以尝试我用shell脚本实现的例子。
这也是基于NTFS-3G中的system.ntfs_attrib_be
属性。如果你只是要使用它而不关心它是如何实现的(用Python还是shell),只需从你的发行版下载并安装getfattr
和setfattr
,然后使用它即可。
os.walk
中不显示的特殊文件? - AndiDog