[Розширена версія]
Це буде набагато швидше і точніше, ніж початкова версія нижче, і виведе суму всього розміру файлу поточного каталогу:
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надто довго будете скаржитися на список аргументів.