2015-04-02 29 views
0

我有一台服务器,其中包含大量文件和文件夹。我们正在谈论一个非常大的数字 - 在数千个文件和文件夹中都很容易,可能还有很多,但我还没有完成数目。使用mac OSX统计服务器上目录中的最大“级别”(即最大数量的子文件夹)

我会举一个我的层次结构的例子,然后问我的问题。

实施例文件夹:

 
    Starting folder-->     
        folder1a -->        
           folder2a --> 
              folder3a 
               file3a 
        folder1b --> 
           folder2b --> 
            |  folder3b 
            |    file3b 
            file 2b (at the same level as folder2b) 

这里,folder3b和folder3a均为2级水平从服务器,“开始的文件夹”上的原始的起始文件夹下(是水平甚至正确的字?)。我试图计算此目录中的最深个文件夹。我想我知道如何计算终端的实际文件夹数 - 如果你把

ls -lR | grep ^d | wc -l

它应该给你的子目录数在指定的目录中。例如在这个示例文件夹中,它应该提供6个子目录。然而,我只想要最深层次 - 在这种情况下,答案会相同,文件夹3a和3b的起始目录下降3个级别。因此,在这种情况下,我想我的代码返回3而不是6

如果我也阅读下面的代码正常运行:

echo */ | wc

应该返回2子的数量目录中的目录,但不计入多个级别。

是否可以贯穿整个服务器并返回最低级别的号码?如果我正确地思考这个问题,我希望它返回双击的次数,它将使我得到服务器中最深的文件夹(请注意,我实际上并不需要知道文件路径,只是数字) 。

我会很乐意解释自己,如果我没有尽我所能。

+0

准确的提问, – Chella 2015-04-02 10:58:57

+0

我已经尽我所能解释了我自己 - 我不知道还有什么补充,没有人问我关于这个问题的问题。你有什么想法吗? – Alex139602 2015-04-02 11:36:51

回答

1

您可以使用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 
+0

对不起 - 我已经离开工作,没有机会实际检查。刚刚使用了这个,它给了我14听起来不对,但很可能。如果目录名称命名异常,通过awk传递名称是否仍然适用于目录分隔符?例如有些空间,一些特殊字符等,如果是这样的话,那么14可能是正确的,但是我肯定我手动计算了一些(我有一个快速浏览以获得一个粗略的想法),并认为我得到了16点,并且没有看完所有的文件夹。 – Alex139602 2015-04-10 11:29:20

+0

同样感谢您解释终端代码的演变 - 它对你逐步解释每个部分/它有什么帮助,因为我是unix的新手,这对于理解有很大的帮助。 – Alex139602 2015-04-10 11:35:03

+0

我在答案的底部添加了另一个版本,显示了每个关卡的层数和名称,如果你想检查。 – 2015-04-10 15:05:08

0

如果我正确理解你的问题,这应该为你工作:

find . -type d | sed -e s':[^/]::g' | wc -L 
  • 首先我们搜索所有子目录和havve的路径名(这将是印刷的路径名
  • 像“./folder1a/folder2a”)我们消除了一切,但斜杠
  • 我们使用wc返回最长的行长度,这是最大的斜线数,因此最大的乐子目录
+0

我不相信OS X上的'wc'接受'-L'作为参数。 – 2015-04-02 12:27:18

+0

@mark setchell恐怕这可能是正确的,我目前无法检查 – 2015-04-02 12:31:07

+0

-L在OSX中不被接受,因为Mark伤心地说。但是我没有使用-L,并且给了我:2851 2850 20808,这只是目录的最大数目,而不是最低级别。 – Alex139602 2015-04-10 11:33:18