【发布时间】:2018-07-03 11:19:57
【问题描述】:
我正在尝试对 inode 进行一些计算(获取它们的大小等...) 我在网上找到的只是如何获取某个文件或目录的inode,但我想通过一次调用获取所有inode,然后逐个使用它们有什么想法吗?
谢谢
【问题讨论】:
标签: python linux filesystems inode
我正在尝试对 inode 进行一些计算(获取它们的大小等...) 我在网上找到的只是如何获取某个文件或目录的inode,但我想通过一次调用获取所有inode,然后逐个使用它们有什么想法吗?
谢谢
【问题讨论】:
标签: python linux filesystems inode
这个怎么样?
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 命令采用三个标志参数,R、l 和 i。 R 执行递归搜索以检查文件夹和所有以 / 开头的子文件夹中的所有文件,l 格式化输出以提供给我们一个列表,i 给我们提供 inode。我们将结果传递给 awk 以获取包含 inode 的第一列,然后对该数据进行一些简单的清理。
【讨论】:
R 标志,以便ls 递归搜索根文件系统。我刚刚更新了我的答案。希望对你有用
您可以使用 Python3 中的 scandir 函数枚举所有 inode。
import os
inodes = [ ]
for dirname,subdirs,filenames in os.walk('/') :
inodes.extend ( [ k.inode() for k in os.scandir(dirname) ] )
os.walk 返回所有目录。
os.scandir 返回每个目录中的所有条目。
如果要获取起始目录的 inode,则必须使用 os.stat 来完成。
【讨论】: