我使用术语“容器文件”来描述实际上包含一个文件或两个或多个文件的任何文件。一些例子是焦油档案或一个目录。
假设我用一些归档 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,因为您从容器外部开始,必须扩展一个容器才能提取文件。