我有一个服务器,里面有很多文件和文件夹。我们谈论的是一个非常大的数字——文件和文件夹都很容易达到数千,可能更多,但我还没有统计。
我将举一个我的等级制度的例子,然后问我的问题。
示例文件夹:
正在启动文件夹-->文件夹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
返回最长的行长度,这是斜杠的最大数量,因此是子目录的最大级别