Получение информации из очень большого каталога
-
20-09-2019 - |
Вопрос
Я достиг предела Linux в 32 000 подкаталогов.Это вызвало проблемы с моими PHP-скриптами, и я не хочу, чтобы это повторилось.
Простое решение состоит в том, чтобы мои PHP-скрипты проверяли количество текущих подкаталогов, прежде чем пытаться создать другой подкаталог.
Все идеи такой проверки, которые я видел, включают перебор всего каталога и подсчет каждой папки.Учитывая, что меня беспокоят очень большие каталоги, есть ли лучший способ получить количество содержащихся в них файлов/папок?
Бонусный вопрос:существует ли также неитеративный способ узнать использование диска в каталоге?
Заранее спасибо!Брайан
Решение
Лучший способ — спроектировать структуру каталога так, чтобы в одном каталоге никогда не было 32 000 файлов.На самом деле, я бы предположил, что даже 1000 файлов в каталоге — это слишком много.
Подход, который я обычно использую для решения этой проблемы, включает дополнительные уровни иерархии каталогов.Типичный способ — взять имена файлов, которые вы сейчас храните в одном каталоге, и разбить его на части, соответствующие вложенным каталогам.Итак, если у вас есть куча файлов типа
xyzzy
foo
bar
blah
на самом деле вы можете сохранить их как
x/xyzzy
f/foo
b/bar
b/blah
и так далее.Вы можете распространить это на несколько уровней каталогов или использовать более одного символа для разделения подкаталогов, чтобы найти компромисс между глубиной и широтой этого подхода.
Вероятно, вам предложат использовать файловую систему, не имеющую ограничения на размер файла в 32 КБ.Лично я бы даже при такой файловой системе всегда использовал схему, подобную той, которую предлагаю здесь.Практически невозможно эффективно работать с инструментами командной строки в каталогах с очень большим количеством файлов (даже ls
становится совершенно громоздким), и такого рода ручное исследование всегда необходимо во время разработки, отладки и часто время от времени во время нормальной работы.