使用 mac OSX 计算服务器目录中的最大 "levels" 也就是最大子文件夹数
Counting the maximum "levels" aka largest number of subfolders in a directory on a server, using mac OSX
我有一台服务器,里面有很多文件和文件夹。我们说的是一个非常大的数字 - 文件和文件夹很容易达到数千个,可能更多,但我还没有计算过。
我将举例说明我的层次结构,然后提出我的问题。
示例文件夹:
Starting folder-->
folder1a -->
folder2a -->
folder3a
file3a
folder1b -->
folder2b -->
| folder3b
| file3b
file 2b (at the same level as folder2b)
这里,folder3b 和 folder3a 都比服务器上的原始起始文件夹低 2 级,'starting folder'(级别这个词正确吗?)。我正在尝试计算此目录中 deepest 个文件夹的数量。我想我知道如何计算终端中的实际文件夹编号 - 如果你输入
ls -lR | grep ^d | wc -l
它应该为您提供指定目录中的子目录数。例如在这个示例文件夹中,它应该给出 6 个子目录。然而,我只想要最深层次——在这种情况下,答案是相同的,文件夹 3a 和 3b 的起始目录都向下 3 层。所以在这种情况下,我希望我的代码为 return 3 而不是 6。
如果我也正确阅读了以下代码,运行ning:
echo */ | wc
应该return 2 表示目录中子目录的数量,但不超过一级。
是否可以运行遍历全服,return最下层的那个号?如果我考虑正确,我希望它 return 双击我到达服务器中最深文件夹的次数(请注意,我实际上不需要知道文件路径,只是数字)。
如果我没有说清楚,我会很乐意解释自己。
您可以像这样使用 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,[=13=]}' | sort -rn
如果我正确理解你的问题,这应该对你有用:
find . -type d | sed -e s':[^/]::g' | wc -L
- 首先我们搜索所有子目录并打印路径名
- 在路径名(类似于“./folder1a/folder2a”)中,我们删除除斜杠以外的所有内容
- 我们使用
wc
到return最长的行长度,也就是最大的斜线数,也就是子目录的最大层级
我有一台服务器,里面有很多文件和文件夹。我们说的是一个非常大的数字 - 文件和文件夹很容易达到数千个,可能更多,但我还没有计算过。
我将举例说明我的层次结构,然后提出我的问题。
示例文件夹:
Starting folder--> folder1a --> folder2a --> folder3a file3a folder1b --> folder2b --> | folder3b | file3b file 2b (at the same level as folder2b)
这里,folder3b 和 folder3a 都比服务器上的原始起始文件夹低 2 级,'starting folder'(级别这个词正确吗?)。我正在尝试计算此目录中 deepest 个文件夹的数量。我想我知道如何计算终端中的实际文件夹编号 - 如果你输入
ls -lR | grep ^d | wc -l
它应该为您提供指定目录中的子目录数。例如在这个示例文件夹中,它应该给出 6 个子目录。然而,我只想要最深层次——在这种情况下,答案是相同的,文件夹 3a 和 3b 的起始目录都向下 3 层。所以在这种情况下,我希望我的代码为 return 3 而不是 6。
如果我也正确阅读了以下代码,运行ning:
echo */ | wc
应该return 2 表示目录中子目录的数量,但不超过一级。
是否可以运行遍历全服,return最下层的那个号?如果我考虑正确,我希望它 return 双击我到达服务器中最深文件夹的次数(请注意,我实际上不需要知道文件路径,只是数字)。
如果我没有说清楚,我会很乐意解释自己。
您可以像这样使用 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,[=13=]}' | sort -rn
如果我正确理解你的问题,这应该对你有用:
find . -type d | sed -e s':[^/]::g' | wc -L
- 首先我们搜索所有子目录并打印路径名
- 在路径名(类似于“./folder1a/folder2a”)中,我们删除除斜杠以外的所有内容
- 我们使用
wc
到return最长的行长度,也就是最大的斜线数,也就是子目录的最大层级