[Розширена версія]
Це буде набагато швидше і точніше, ніж початкова версія нижче, і виведе суму всього розміру файлу поточного каталогу:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
stat -c %s
команда на файл буде повертати його розмір в байтах. tr
Команда тут використовуються для подолання xargs
обмежень команди ( по видимому , з запалом , щоб xargs
це результат розщеплення на кілька рядків, порушуючи логіку моєї команди). Отже tr
, піклується про заміну лінійного каналу +
знаком (плюс). sed
має єдину мету - видалити останній +
знак із отриманого рядка, щоб уникнути скарг на остаточну bc
команду (основний калькулятор), яка, як завжди, робить математику.
Виступи: Я протестував його в декількох каталогах і понад ~ 150 000 файлів вгорі (поточна кількість файлів моєї Fedora 15 box), маючи те, на що я вважаю, це надзвичайний результат:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
Про всяк випадок, якщо ви хочете порівняти з du -sb /
командою, вона виведе орієнтовне використання диска в байтах ( -b
опція)
# du -sb /
12684646920 /
Як я очікував, він трохи більший, ніж мій розрахунок команди, тому що du
утиліта повертає виділений простір кожного файлу, а не фактичний спожитий простір.
[початкова версія]
Ви не можете скористатися du
командою, якщо вам потрібно знати точний розмір вашої папки, оскільки (відповідно до цитованої сторінки) du
оцінюється використання файлового простору. Отже, це призведе до неправильного результату, наближення (можливо, близького до розміру суми, але, швидше за все, більше, ніж фактичний розмір, який ви шукаєте).
Я думаю, що на ваше запитання можуть бути різні способи, але це моє:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
Він знаходить усі файли під. каталог (зміна. будь-який каталог, який вам подобається), також включаються приховані файли і (використовуючи xargs
) виводить їх імена в один рядок, а потім створює детальний список, використовуючи ls -l
. Цей (іноді) величезний висновок передається в бік команди cut і -f5
береться лише п’яте поле ( ), яке є розміром файлу в байтах, і знову проходить по відношенню до xargs
якого знову створюється один рядок розмірів, розділений пробілами. Тепер виконайте магію sed, яка замінює кожне порожнє місце +
знаком плюс ( ) і, нарешті, bc
(основний калькулятор) робить математику.
Можливо, вам знадобиться додаткова настройка, і ви, можливо, ls
надто довго будете скаржитися на список аргументів.