Получение информации из очень большого каталога

StackOverflow https://stackoverflow.com/questions/1345278

  •  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 становится совершенно громоздким), и такого рода ручное исследование всегда необходимо во время разработки, отладки и часто время от времени во время нормальной работы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top