如何使用python获取linux文件系统下的所有inode?

时间:2018-01-24 12:02:42

标签: python linux filesystems inode

我正在尝试对inode进行一些计算(获取它们的大小等...) 我在网上找到的只是如何获取某个文件或目录的inode,但我想通过一次调用得到所有的inode,然后逐个使用它们有什么想法?

由于

2 个答案:

答案 0 :(得分:0)

这个怎么样?

import os
inodes = os.popen("sudo ls -Rli / | awk '{ print $1 }'").read().split('\n')
inodes = [int(i) for i in inodes if i.isnumeric()]

对于我的主文件夹,这将返回一个inode编号列表:

[11666512, 10223622, 10234894, 10223641, 10223637, 10617011, 10254828, 10249545, 10223642, 10223643, 10487015, 10223640, 11929556, 10223639, 10223644, 10486989]

为了澄清,ls命令采用三个标记参数RliR执行递归搜索以检查文件夹中的所有文件以及以/开头的所有子文件夹,l格式化输出以向我们提供列表,i为我们提供索引节点。我们将结果传递给awk以获取包含inode的第一列,然后对该数据进行一些简单的清理。

答案 1 :(得分:0)

您可以使用Python3中的scandir函数枚举所有inode。

 public class FiatCurrencyGroupMap : ClassMap<FiatCurrencyGroup>
 {
  public FiatCurrencyGroupMap()
  {
     Id(x => x.Id);
     HasMany<Denomination>(x => x.Denominations)
        .Cascade.All();
  }
}

os.walk返回所有目录。
os.scandir返回每个目录中的所有条目。 如果要获取起始目录的索引节点,则必须使用os.stat进行。