有没有办法找到给定目录树的最大深度?我正在考虑使用 find 来增加 maxdepth 并比较找到的目录数量,但也许有更简单的方法?
答案1
一种方法是假设 GNU find
:
find . -type d -printf '%d\n' | sort -rn | head -1
这不是特别有效,但它肯定比-maxdepth
依次尝试不同的要好得多。
答案2
试试这个,例如尝试找到 下树的最大深度/
,使用
find / -type d
/
无论深度如何,都会给出每个目录。因此,awk
结果作为/
分隔符来查找计数,并且count-1
会给出来自 的树的最大深度/
,因此命令将是:
find / -type d | awk -F"/" 'NF > max {max = NF} END {print max}'
答案3
考虑使用updatedb
然后locate
。当locate
查询数据库时,它的执行速度非常快,并且比单独请求每个文件要快得多。updatedb
也很快,因为它只更新数据库的更改,而不是重新创建数据库。唯一的缺点是updatedb
默认情况下您可能需要 root 权限才能运行,除非您创建并保留自己的用户空间数据库。
locate
请记住,文件名中可能有换行符,因此在处理输出时需要更加小心。最好使用空字节作为文件名分隔符。
把它们加起来:
updatedb && locate -0 "$(pwd)" | awk -v RS='\0' -F"/" '{print NF-1}' | sort -n | tail -n1
感谢@sai sasanka 为我提供了一个完美的 awk 脚本。