
我使用術語“容器文件”來描述實際上包含一個文件或兩個或多個文件的任何文件。一些例子是焦油檔案或一個目錄。
假設我用一些歸檔 GUI 軟體打開一個 tar 歸檔文件,或者假設我用一些 GUI OS 文件瀏覽器打開一個目錄,在這兩種情況下,實際上都是一個文件或兩個或多個文件包含在容器文件中出現在我面前(在第一個,最基本的深度 - 不考慮“更深的深度”)。
一般來說,在 Unix 和 Linux 系統中這些檔案的深度是多少?深度是0還是深度1?
答案1
為了回答你的問題,我會引用命令中深度的用法find
。您可以使用該標誌--maxdepth
來定義要尋找某些檔案的最大深度。現在,如果您位於具有以下結構的目錄(或容器檔案中,儘管這通常與 docker 相關)
.
└── dir1
└── file1
(這是 tree 命令的輸出)並運行find -maxdepth 0
你只得到.
.相反,當您運行時,find -maxdepth 1
您將獲得您所在目錄的實際內容,即./dir1
.為了延續這個,使用 maxdepth 2 的搜尋當然也會輸出,./dir1/file1
但這應該已經很明顯了。
綜上所述,您目前所在目錄中包含的檔案深度為 1,而不是 0。
答案2
這個問題似乎是在詢問術語。你小心是對的,「深度」這個詞可能很棘手,我總是發現自己在使用它之前檢查自己的邏輯。
要理解為什麼答案是 1(而且確實是 1),您必須明白從 0 開始索引或從 1 開始索引的決定並不是任意的。它實際上描述的是兩種完全不同的事物。為了進行解釋,請考慮一個包含一些顏色 [紅色、藍色、紫色] 的清單。我們可以透過兩種方式來討論這個清單:
- 在列表中:1st是紅色的,2nd 是藍色的,3rd 是紫色的。明確從 1 開始索引
- 紫色是2遠離清單開頭,藍色是1遠離清單的開頭,紅色是清單的開頭 -0。索引從 0 開始。
在計算機科學中,首選使用偏移量(從 0 開始索引),因為它使許多數學運算更易於編程。但重要的是要理解我們不僅僅是“從零開始索引”,我們描述的是不同的東西。
從零開始索引是(實際上)總是有一個偏移量,即使存在幻零。
用find
術語來說,find 是從 0 開始索引,作為目前目錄的偏移量。因此-maxdepth 1
意味著從當前目錄開始探索1層。同樣,find . -maxdepth 0
這只是.
因為您從當前目錄開始並且不擴展任何內容。
在這次討論之前,您很可能從未考慮過尋找深度 0。0 是一個幻影(沒有真正用處)。
接下來,在容器術語中,深度 0 意味著擴展零個 zip 檔案。這意味著根本沒有容器。單層深度(包含其他檔案但不包含其他 zip 的 zip)始終為深度 1,因為您從容器外部開始,必須擴充一個容器才能提取檔案。