
Я использую термин «файл-контейнер» для описания любого файла, который фактически содержит один файл или два или более файлов. Вот несколько примеров:tar-архивиликаталог.
Допустим, я открываю архив tar с помощью какой-либо программы для архивации с графическим интерфейсом пользователя или, допустим, я открываю каталог с помощью какого-либо браузера файлов ОС с графическим интерфейсом пользователя, и в обоих случаях, действительно, один файл или два или более файлов, которыесодержалсяв файле-контейнере предстают передо мной (в первой, самой базовой глубине - не считая "более глубоких глубин").
В общем, какова глубина этих файлов в системах 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
означает начать с текущего каталога и закончить explore 1 слой. Аналогично find . -maxdepth 0
это просто .
потому, что вы начинаете с текущего каталога и ничего не расширяете.
До этого обсуждения вы, скорее всего, даже не задумывались о поиске глубины 0. 0 — это фантом (не особо полезный).
Исходя из этого, в терминологии контейнеров глубина 0 должна была бы означать развертывание нулевых zip-файлов. Это означало бы, что контейнера вообще нет. Глубина в один слой (zip, содержащий другие файлы, но без других zip-файлов) всегда будет иметь глубину 1, поскольку вы начинаете за пределами контейнера и должны развернуть один контейнер, чтобы извлечь файлы.