Есть ли общий термин для элементов в каталоге?
Мне просто любопытно, есть ли стандартный компьютерный термин, который охватывает все в каталоге, вместо того, чтобы всегда упоминать "файлы" и "(под) каталоги / папки" отдельно. Таким образом, вы можете сказать, пройти через все term
в dir_1
,
Изменить: Просто чтобы прояснить, я ищу единичный термин, как в моем примере предложения.
6 ответов
POSIX readdir
документация использует слово ввода:
Функция readdir() должна возвращать указатель на структуру, представляющую запись каталога в текущей позиции в потоке каталога, заданном аргументом dirp, и помещать поток каталога в следующую запись. Он должен возвращать нулевой указатель при достижении конца потока каталога. Структура dirent, определенная в заголовке
, описывает запись каталога.
Файл. По крайней мере, в POSIX-совместимых системах.
3.164 Файл
Объект, который может быть записан или прочитан, или и то, и другое. Файл имеет определенные атрибуты, включая права доступа и тип. Типы файлов включают обычный файл, специальный символьный файл, специальный файл блока, специальный файл FIFO, символьную ссылку, сокет и каталог. Другие типы файлов могут поддерживаться реализацией.
( источник)
Люди, которые говорят "файлы", когда имеют в виду только "обычные файлы", на самом деле не POSIX-совместимы.:)
Вы можете узнать, что такое POSIX, из ответов на этот вопрос. Различные операционные системы совместимы с POSIX (полностью или в основном) или нет. Не вдаваясь в подробности, этот ответ относится к Unix и Unix-подобным системам (включая macOS, Linux, BSD), но не к семейству Windows в целом.
Хороший вопрос.
Я использую "содержимое" как термин, который охватывает как файлы, так и подпапки.
Например: "Нам нужно скопировать все содержимое этого каталога".
Есть хорошие ответы, которые предлагают файлы и записи. (Прочтите их, если вы не понимаете, почему эти слова подходят, и помните, что в POSIX "файл" включает в себя все типы inode (включая каталог), а не только обычные файлы). Записи каталога (имена файлов) являются ссылками на файлы / иноды.
Файл может иметь несколько имен в разных каталогах (количество ссылок> 1). Фактический файл data/inode не сохраняется в каталоге, содержащем для него имя файла.
Но здравомыслящие люди без проблем говорят такие вещи, как "прочитать файл, который находится в каком-то каталоге". Было бы излишне педантично беспокоиться о том, чтобы всегда делать различие между файлом (inode + data) и записями имени файла (ов) / каталога, которые к нему относятся.
Также обратите внимание, что записи каталога в современных файловых системах часто также содержат поле типа, поэтому такие программы, как find
не нужно stat(2)
каждый файл для проверки предикатов, таких как find -type f
(обычный файл) или символическая ссылка или что-то. Или найти записи, которые сами являются каталогами при повторении. См. Проверка наличия директ. запись, возвращаемая readdir, является каталогом, ссылкой или файлом. dent-> d_type не показывает тип в переполнении стека.
Как путь foo/bar
или же/a/b/foo/bar
это строка, которая заканчивается именем файла, но может использовать каталоги для ссылки на имя файла, которого нет в текущем каталоге.foo
это простой путь, а также имя файла. Но foo/bar
это имя файла, а также путь. Но вы можете утверждать, что это не "имя файла". Путь или имя пути - это то, что вы можете передать системному вызову, например, POSIX open(2)
или жеchdir(2)
или Win32OpenFile()
Ваш выбор терминологии (файл против имени файла против записи каталога), вероятно, будет зависеть от контекста и того, что вы делаете. например, чтение содержимого или метаданных inode включает в себя фактический файл.
Но просто сопоставление выражения glob с именем вообще не затрагивает файл, только запись имени файла / каталога.
Запись в каталоге является наиболее подходящей, когда на самом деле зацикливается на такой функции, как readdir(3)
или, например, "использовать ln
"создать новую запись каталога, ссылающуюся на этот файл". При работе с жесткими ссылками термин "dir entry" полезен в отличие от файла, более того, чем "filename".
Но "имя" тоже работает. например, "файл с 2 именами".
Чаще вы пишете сценарий оболочки, используя имена переменных, такие как c_files=( *.c )
, Или же fn
(для имени файла) также является хорошим именем локальной переменной.
С помощью entries=( *.c )
будет странно "Записи" чувствуют себя хорошо только тогда, когда говорят о процессе их циклического получения для получения имен файлов, а не для результирующего набора имен файлов, которые соответствуют какому-либо фильтру.
Почему бы не поднять уровень абстракции вместо использования только "компьютерных терминов":
Шаг до более общей формулировки...
Зрелая файловая система хранит content
,
Это позволяет "файлы" и "папки" в качестве основного содержимого.
Чаще всего "папка" может хранить подуровни контента...
В зависимости от выбора файловой системы могут быть другие типы контента.
Мне нравится термин « дерево» , и действительно, в Linux есть команда, которая выводит список всего в текущем каталоге и всех каталогах ниже, а также их файлах и подкаталогах.
Вот пример установки и использованияtree
команда. Пример по ссылке:
Хотя скриншоты терминалов обычно не одобряются, поскольку предпочтение отдается копированию и вставке чистого текста, я думаю, что нарушение в этом случае, вероятно, будет прощено большинством читателей.