2015-04-02 56 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