使用 mac OSX 计算服务器上目录中的最大"levels"(即最大子文件夹数)



我有一个服务器,里面有很多文件和文件夹。我们谈论的是一个非常大的数字——文件和文件夹都很容易达到数千,可能更多,但我还没有统计。

我将举一个我的等级制度的例子,然后问我的问题。

示例文件夹:

正在启动文件夹-->文件夹1a-->文件夹2a-->文件夹3a文件3a文件夹1b-->文件夹2b-->|文件夹3b|文件3b文件2b(与文件夹2b处于同一级别)

这里,folder3b和folder3a都比服务器上的原始起始文件夹"起始文件夹"低2级(级别是正确的词吗?)。我正在计算此目录中最深的文件夹数。我想我知道如何计算终端中的实际文件夹编号——如果你输入

ls -lR | grep ^d | wc -l

它应该为您提供指定目录中的子目录数。例如,在这个示例文件夹中,它应该提供6个子目录。然而,我只想要最深的层次——在这种情况下,答案是一样的,文件夹3a和3b的起始目录都有3个层次。所以在这种情况下,我希望我的代码返回3而不是6。

如果我也正确阅读了以下代码,运行:

echo */ | wc

对于目录中的子目录数量,应返回2,但向下计数不超过一级。

是否可以运行整个服务器并返回最低级别的数字?如果我想得对,我希望它返回我到达服务器中最深文件夹所需的双击次数(注意,我实际上不需要知道文件路径,只需要知道数字)。

如果我没有做出应有的解释,我会很高兴地解释自己。

您可以像这样使用find来仅列出目录

find . -type d

如果您通过awk传递名称列表,那么如果您使用目录分隔符(/)作为awk的字段分隔符,则可以计算有多少字段(即级别)

find . -type d | awk -F'/' '{print NF}'

然后你可以通过sort找到最大的

find . -type d | awk -F'/' '{print NF}' | sort -rn

更新

如果你想检查我的计数是否和你一样,你可以运行这个命令,它会显示目录的数量和所有名称:

find . -type d | awk -F'/' '{print NF,$0}' | sort -rn

如果我正确理解你的问题,这应该对你有效:

find . -type d | sed -e s':[^/]::g' | wc -L
  • 首先,我们搜索所有子目录并打印路径名
  • 在路径名(类似于"./folder1a/folder2a")中,我们删除了除斜杠之外的所有内容
  • 我们使用wc返回最长的行长度,这是斜杠的最大数量,因此是子目录的最大级别

最新更新