Самый быстрый способ рассчитать размеры каталога - PullRequest
5 голосов
/ 29 ноября 2010

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

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

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

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

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

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

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

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

Спасибо.

Ответы [ 4 ]

6 голосов
/ 30 ноября 2010

Почему бы просто:

du -sm /users/*

(Самая медленная часть, вероятно, все еще будет du, пересекая файловую систему, чтобы рассчитать размер)

4 голосов
/ 30 ноября 2010

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

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

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

4 голосов
/ 29 ноября 2010

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

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

1 голос
/ 21 марта 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...