2010-11-29 2 views
5

что самое лучшее и самый быстрый способ рассчитать размеры каталога? Например, мы будем иметь следующую структуру:Самый быстрый способ расчета размеров каталога

/users 
     /a 
     /b 
     /c 
     /... 

Нам нужен выход, чтобы быть в директории пользователя:

a = 1224KB 
b = 3533KB 
c = 3324KB 
... 

Мы планируем уже десятки, может быть, даже сотни тысяч каталогов в/пользователей. Следующая команда оболочки работает:

du -cms /users/a | grep total | awk '{print $1}' 

Но, мы должны будем называть его N раз. Все дело в том, что вывод; каждый размер каталога пользователей будет храниться в нашей базе данных. Кроме того, мы хотели бы, чтобы он обновлялся как можно чаще, но без блокировки всех ресурсов на сервере. Возможно ли даже каждый раз подсчитывать размер каталога пользователей? Как насчет каждые 5 минут?

Теперь, когда я думаю об этом еще, было бы целесообразно использовать node.js? Таким образом, мы можем рассчитать размеры каталогов и даже вставить в базу данных все в одной транзакции. Мы могли бы это сделать и в PHP и Python, но не уверены, что это так же быстро.

Спасибо.

+0

Спасибо, я пошел назад и промаркирован ответы. – Justin 2010-11-29 23:47:52

+0

Ни один из ответов не отмечен как принятый. – JigarGandhi 2014-12-17 10:28:14

ответ

4

Для чего нужна эта информация? Если только для напоминания пользователям о том, что их домашние каталоги слишком велики, вы должны добавить квоты пределов файловой системы. Вы можете установить квоту на 1000 ГБ, если хотите просто цифры, не ограничивая при этом использование диска.

Цифры обычно точны, когда вы получаете доступ к чему-либо на диске. Единственным недостатком является то, что они сообщают вам, насколько велики файлы, которые принадлежат конкретным пользователем, а не то, насколько велики файлы под его домашним каталогом. Но, может быть, вы можете жить с этим.

4

Я думаю, что вы ищете:

du -cm --max-depth=1 /users | awk '{user = substr($2,7,300); 
>         ans = user ": " $1; 
>         print ans}' 

Магические числа 7 забирает подстроку/пользователей /, и 300, это просто произвольное большое число (AWK не один из моих лучших языков = D, но я предполагаю, что часть не будет записываться в awk в любом случае.) Это быстрее, потому что вы не включаете greping для всего, и цикл содержится внутри du. Готов поспорить, это можно сделать быстрее, но это должно быть достаточно быстро.

5

Почему не просто:

du -sm /users/* 

(медленная часть по-прежнему, вероятно, будет du обход файловой системы для расчета размера, хотя).

1

не то, что медленно, но покажет вам размер папки: Du -sh/*> total.size.files.txt

Смежные вопросы