Получение информации об очень большом каталоге - PullRequest
2 голосов
/ 28 августа 2009

Я достиг предела 32 000 подкаталогов Linux. Это вызвало проблемы с моими PHP-скриптами, и я не хочу, чтобы это повторилось.

Простое решение состоит в том, чтобы мои PHP-скрипты проверяли текущее количество подкаталогов, прежде чем пытаться создать другой подкаталог.

Все идеи, которые я видел для выполнения такой проверки, включают в себя итерации по всему каталогу и подсчет каждой папки. Учитывая мое беспокойство по поводу очень больших каталогов, есть ли лучший способ получить количество файлов / папок, которые он содержит?

Бонусный вопрос: есть ли не итеративный способ узнать использование каталога диском?

Заранее спасибо! Brian

1 Ответ

4 голосов
/ 28 августа 2009

Лучший способ - спроектировать макет вашего каталога, чтобы у вас никогда не было 32000 файлов в одном каталоге. На самом деле, я бы сказал, что даже 1000 файлов в каталоге слишком много.

Подход, который я обычно использую для решения этой проблемы, включает дополнительные уровни иерархии каталогов. Типичный способ - взять имена файлов, которые вы сейчас храните, в один каталог и разбить его на части, которые соответствуют вложенным каталогам. Итак, если у вас есть куча файлов, таких как

xyzzy
foo
bar
blah

вы можете хранить их как

x/xyzzy
f/foo
b/bar
b/blah

и так далее. Вы можете расширить это до нескольких уровней каталогов или использовать более одного символа для разделения подкаталогов, чтобы соотнести глубину и ширину этого подхода.

Вы, вероятно, получите предложения, что вы используете файловую систему, которая не имеет ограничения в 32 КБ. Лично, даже с такой файловой системой, я всегда использовал бы схему, как я предлагаю здесь. Практически невозможно эффективно работать с инструментами командной строки в каталогах с очень очень большим количеством файлов (даже ls становится совершенно громоздким), и этот вид ручного исследования всегда необходим во время разработки, отладки и часто время от времени во время нормальной работы.

...