отримати приблизний розмір каталогу (рекурсивно включаючи всі файли та підкаталоги)


10

Чи є спосіб швидко отримати точний розмір для каталогу (включаючи, рекурсивно, всі його підкаталоги)? Я не хочу розмірів підкаталів, я просто маю на увазі, що вони повинні бути рекурсивно включені до загального розміру звіту.

Якщо цього не зробити, спосіб отримати приблизний розмір? Я щось замислююся, dfщо створює швидку відповідь для всієї файлової системи, але на цей раз для конкретного каталогу (і це підкаталоги).

Рішення, що використовують, duздається, забирають віки, коли каталог містить тисячі суб-адрес.


Використання du- це єдиний мені відомий метод. Проблема полягає в тому, що дані поширюються по всій ієрархії, тому їх потрібно обробляти інструментом для отримання підрахунків.
slm

Відповіді:


15

Я вважаю це досить корисним.

du -sm Directory

або отримати розбивку всередині каталогів

du -sm Directory/*

а потім з сортуванням, якщо у нього багато підкаталів

du -sm Directory/* | sort -n 

Причиною, що я використовую -m варіант, є забезпечення мегабайтного виводу. Мені здається, що це простіше порівняти візуально (коли я не отримую суміш одиниць, наприклад, порівняти 999 КБ та 1 МБ проти 999000 МБ та 1000000 МБ), додатковою перевагою є те, що ви можете передавати вихід у сортування.

Помістіть все на задньому плані та переадресуйте висновок, це займе час, що використовується колись метод, це обробка багатьох файлів, які потребують часу.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Зверніть увагу на зворотний сорт, щоб великі були на початку. Додайте це до запуску кронів кожні n хв.

Потім за допомогою псевдоніму ducache ви отримали досить сучасне використання каталогу.

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian дивіться мій коментар до відповіді glenn jackman
Marcus Junius Brutus

Прийнято, тому я використовую -m і сортую
X Tian

3
Пам’ятайте shopt -s dotglob, що в іншому випадку du -sm Directory/*не буде зараховано приховані файли / каталоги.
Дмитро Григор’єв

@XTian вибачте, але мені не вдалося, щоб деякі команди PLS допомогли.
Maveň ツ

Я отримав це звідси
Maveň ツ

5
du -sh "$dir"

дасть вам підсумок загального розміру у форматі "людського" форматування.


Оскільки ви шукали альтернативу du, я спробував find, але це абсолютно те саме:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

Дякую, я знаю про це, але duпроходить занадто довго, оскільки він дає точний результат. Я сподівався на інструмент / команду, яка забезпечує швидку "брудну" приблизну відповідь.
Маркус Юній Брут

Є, dfале це працює у всій файловій системі.
glenn jackman

1

Можливо, вам не сподобається моя відповідь, але я думаю, що найкращий спосіб робити те, що ви хочете, - це регулярно запускати "du -s" у фоновому режимі, використовуючи cron і зберігати результат у файлі. Потім, коли ви хочете наблизити значення, використовуйте значення з файлу. Ви повинні вирішити, як часто запускати дю. Я не бачу більш швидкого способу отримання вартості. Команда du ефективна для того, що робить.

Єдиний інший спосіб, як ви могли це зробити дуже швидко, - це створити файлову систему для каталогу, тоді df отримає вам відповідь, яку ви хочете дуже швидко.

Якщо швидше знати все у файловій системі, крім вашої каталогів, ви можете запустити df для файлової системи, du для всього іншого, крім вашого каталогу та віднімання.


0

Це не точно відповідає вашим потребам (не однолінійному друку), але простіше, ніж інші рішення:

du -a -h | sort -hr | head -2

Ця команда надасть вам розмір каталогу та підкаталогу та розмір найбільшого файлу чи підкаталога у поточному каталозі.

PS: Це head -2на випадок, якщо підкаталог займає все місце поточного каталогу і слухається перед поточним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.