在Linux中查找一个目录的最大深度

时间:2016-11-30 04:46:02

标签: linux tree linux-kernel filesystems depth

根据最大深度,我指的是最深的后代与此目录之间的距离。

有没有办法在不遍历所有文件系统树的情况下获取目录的最大深度?或者我可以挖掘Linux内核代码中的哪个部分来获取此值?

1 个答案:

答案 0 :(得分:1)

  

有没有办法在不遍历所有文件系统树的情况下获取目录的最大深度?

除了getdents / DECLARE @EndYear INT =2020 --Also you can get from data by MAX(Year) ;WITH tb(PROJECT_ID,RELEASE_NO,[YEAR],VALUE_TYPE,VAL_DES,COST,RUN_TATE,FREQUENCY) AS( SELECT 111,1,2016,'IT','EXPENSE',0,NULL,NULL UNION SELECT 111,1,2016,'IR','INCOME',10000,NULL,NULL UNION SELECT 111,1,2016,'OC','EXPENSE',-200000,NULL,NULL UNION SELECT 111,1,2016,'Vendor','EXPENSE',-5000,NULL,NULL UNION SELECT 111,1,2017,'BC','INCOME',200000,NULL,NULL UNION SELECT 111,1,2017,'ITA','INCOME',5000,5000,'Recurring' UNION SELECT 111,1,2017,'OC','EXPENSE',-200000,NULL,NULL UNION SELECT 111,1,2018,'OC','EXPENSE',-10000,-10000,'Recurring' UNION SELECT 111,1,2018,'PA','INCOME',100000,100000,'Recurring' UNION SELECT 111,1,2019,'icc','INCOME',500,NULL,NULL UNION SELECT 111,1,2020,NULL,NULL,NULL,NULL,NULL ),Recurring AS ( SELECT tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES,MIN([YEAR]) AS StartYear,MAX(COST) AS COST,MAX(tb.RUN_TATE) AS RUN_TATE FROM tb WHERE FREQUENCY='Recurring' GROUP BY tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES ) SELECT * FROM tb union SELECT r.PROJECT_ID,r.RELEASE_NO,n.number AS [YEAR],r.VALUE_TYPE,r.VAL_DES,r.COST,r.RUN_TATE,NULL AS FREQUENCY FROM Recurring AS r OUTER APPLY ( SELECT sv.number FROM master.dbo.spt_values AS sv WHERE sv.type='P' AND sv.number BETWEEN r.StartYear+1 AND @EndYear )n 之外,用户空间中没有任何内容可以返回单个目录的条目。

  

或者我可以挖掘Linux内核代码中的哪个部分来获取此值?

即使在内核中,VFS也只需要一个"迭代"每个文件系统的功能。大多数文件系统都表示为树,并且不会明确跟踪您请求的此指标。没有意义。

您需要遍历树。