我在NTFS
计算机上使用linux
分区。我想使用NTFS
在linux
上的python
分区上识别隐藏的文件和文件夹。
如何使用python
实现此目的。任何代码段/链接都将不胜感激。
感谢。
答案 0 :(得分:5)
假设您使用ntfs-3g在Linux上安装NTFS分区(这在大多数当前的Linux发行版中是默认的)。
您需要阅读文件扩展属性(请参阅attr(5)),您可以使用pyxattr。 NTFS属性作为一组标志存储在system.ntfs_attrib
扩展属性中,这些标记值记录在ntfs-3g documentation中。
以下是读取和解码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 :(得分:1)
linux下的NTFS属性似乎没有python接口。
NTFS-3G支持NTFS file attributes并公开它们以供Linux工具getfattr
和setfattr
阅读和设置。
您可以使用python的subprocess
来调用getfattr
,然后解析输出。
注意:在我的ubuntu系统上,我必须安装包attr
才能获得命令getfattr
和setfattr
。
答案 2 :(得分:0)
如果您的问题不仅限于Python,您可以尝试在shell脚本中实现我的示例。
这也基于NTFS-3G中的system.ntfs_attrib_be
属性。如果您只是使用并且不关心它是如何实现的(在Python或shell中),只需下载它,安装getfattr
和setfattr
来自您的发行版,并使用它。