Як отримати розмір каталогу в командному рядку?


1065

Я намагався отримати розмір каталогу (що містить каталоги та підкаталоги), використовуючи lsкоманду з параметром l. Здається, це працює для файлів ( ls -l file name), але якщо я спробую отримати розмір каталогу (наприклад, ls -l /home), я отримаю лише 4096 байт, хоча в цілому він набагато більший.


18
1) Строго кажучи, ви не можете. У Linux є каталоги, а не папки. 2) Існує різниця між розміром каталогу (який є спеціальним файлом, що містить вставки, що вказують на інші файли), і розміром вмісту цього каталогу. Як зазначали інші, команда du надає останнє, і це, здається, ви хочете.
jamesqf

11
як вам здається, що я є новим, я просто зазначу корисну -hопцію, яку ви можете додати до -lопції (тобто ls -lh), щоб розміри файлів були надруковані у дружній людині позначці, наприклад, 1.1M замість 1130301. "h "в du -hsкоманді, яку @sam дав як відповідь на ваше запитання щодо каталогів, також означає" читабельну людиною ", а також з'являється, в df -hякій відображаються читані людиною кількості використаного та вільного місця на диску.
msouth

Відповіді:


1489

du -sh file_path

Пояснення

  • du( d isc u sage) команда оцінює використання файлового простору
  • Варіанти -sh(від man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Щоб перевірити більше одного каталогу і переглянути загальну, скористайтеся du -sch:

      -c, --total
             produce a grand total
    

44
... якщо у вас немає ;-) жорстких посилань stackoverflow.com/questions/19951883 / ...
Rmano

15
Це така відповідь, яку я люблю <3 Це узагальнено і своєрідне вступ до команди, duа також ви даєте спосіб пошуку більш детальної інформації man du...

Підказка для розробників, схожих на Unix: Наступного разу просто спочатку зробіть команду "diskusage" або, можливо, навіть "використання диска" ... потім ярлик ...;)
jave.web

Це дуже добре працює, find наприклад, підрахувати кількість місця в конкретних підкаталогах поточного шляху: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Олексій Глуховцев

321

Просто використовуйте duкоманду:

du -sh -- *

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

За допомогою dfкоманди можна знати вільний простір у файловій системі, що містить каталог:

df -h .

4
du -sh *починає видавати помилки "невідомого параметра", якщо будь-який з файлів у цьому режимі починається з тире. Безпечніше зробитиdu -sh -- *
mpen

1
du -sh *не показує використання пам'яті прихованих папок
Prashant Prabhakar Singh

4
du -sh -- * .*включити точкові файли. Це корисно для включення .git, наприклад, великого каталогу. Крім того, в zsh ви зможете setopt globdotsглобувати dotfiles за замовчуванням.
cbarrick

1
Що робить --? Я знаю, що це стосується вбудованих оболонок для завершення аргументів опції, але duце не вбудований, і я не бачу цього використання документально підтвердженим для du: linux.die.net/man/1/du
flow2k

Іноді ви хочете додати -b( --apparent-size)
elig

196

duтвій друг. Якщо ви просто хочете дізнатися загальний розмір каталогу, тоді переходьте до нього та запустіть:

du -hs

Якщо ви також хотіли б знати, які підпапки займають скільки місця на диску ?! Ви можете поширити цю команду на:

du -h --max-depth=1 | sort -hr

що дасть вам розмір усіх підпапок (рівень 1). Вихід буде відсортований (найбільша папка вгорі).


Здається, у деяких (можливо, старих?) Версіях Linux, сорт не має перемикача h, і тому наступна найкраща команда, яку я міг би знайти: du -c --max-width = 1 | сортувати -rn
richhallstoke

@richhallstoke, якщо ви використовуєте ncduфайли, сортуються за розміром за замовчуванням.
Armfoot

3
+1 для "| sort -hr"
afranques

67

duможе бути складним у використанні, оскільки вам доведеться здати 100 аргументів, щоб отримати гідний результат. А з'ясування розміру прихованих папок ще складніше.

Зробіть своє життя легким та зручнимncdu .

ncdu

Ви отримуєте резюме папок, які легко переглядаються.


9
Це має бути правильною відповіддю, принаймні для тих, хто може встановити програмне забезпечення в системі. На жаль, я не думаю, що більшість людей прокручуватимуться досить далеко, щоб побачити це.
DavidR

@ RickyNotaro-Garcia Nope, це ігнорує приховані об’єкти і висить у великих каталогах. Можливо, існує добре рішення з десяток труб, але навіщо витрачати своє життя.
Teque5

@ RickyNotaro-Garcia Прочитайте весь мій коментар: ваша спроба ігнорує приховані об’єкти і висить у великих каталогах.
Teque5

2
ncduце чудово, я завжди шукаю цю команду, коли забуваю. Це швидко, легко переміщуватися та допомагає легко знаходити великі папки. FYI, він доступний і для macOS, і, ймовірно, для всіх машин Linux.
Лукас

..і ви можете видалити папки безпосередньо з ncduнатискання dклавіші
ccpizza

32

Інші згадували du, але я також хотів би згадати Ncdu - це версія ncurses duі забезпечує інтерактивність: Ви можете безпосередньо досліджувати ієрархію каталогів і бачити розміри підкаталогів.


26

duКоманда показує використання дискового файлу.

Цей -hпараметр показує результати, прочитані у людській формі (наприклад, 4k, 5M, 3G).

du -h (file name)

22

Усі перераховані вище приклади розкажуть вам про розмір даних на диску (тобто обсяг дискового простору, який використовує певний файл, який, як правило, перевищує фактичний розмір файлу). Є деякі ситуації, коли вони не дадуть точного звіту, якщо дані фактично не зберігаються на цьому конкретному диску і існують лише посилання на inode.

У вашому прикладі ви використовували ls -l в одному файлі, який повертав би фактичний розмір файлу, а не його розмір на диску.

Якщо ви хочете знати фактичні розміри файлів, додайте параметр -b до du.

du -csbh .

Так. Я використовую sdfs, який стискає та виводить файли, тому я не міг зрозуміти, чому він повідомляє про такі низькі числа. Дійсний розмір файлів з ls можна дізнатися, скориставшись: du -b
Ryan Shillington

15

особисто я вважаю, що це найкраще, якщо ви не хочете користуватися ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

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

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

FYI, здається, повідомляє розмір на диску. тобто, ймовірно, буде підкладено до найближчого 4 КБ.
1616 року


9

рекурсивно знаходити всі файли в поточному каталозі та підсумовувати їх розмір:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Я б використовував -not -type dдля підсумовування не тільки розмірів звичайних файлів (-type f ), але і розмірів символічних посилань тощо.
anton_rh

Це чудово, тому що ви не отримуєте накладні витрати, необхідні для зберігання файлів, а лише розмір самих файлів.
bballdave025

9

Ось функція для ваших .bash_aliases

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

вибірка вибірки:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

для підкаталів:

$ dusort .
$ dusort /var/log/


6

Зауважте, що du друкується простір, який займає каталог на носії, який, як правило, перевищує загальний розмір усіх файлів у каталозі, оскільки duвраховує розмір усієї допоміжної інформації, яка зберігається на носії, щоб упорядкувати каталог у відповідності з форматом файлової системи

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

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

Для отримання прямого загального розміру всіх файлів у каталозі можна використовувати наступний однорядковий вираз оболонки (припускаючи систему GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

або навіть коротше:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Він просто підсумовує розміри всіх файлів без каталогу в каталозі (та його підкаталогів рекурсивно) один за одним. Зауважте, що для символьних посилань він повідомляє розмір символьної посилання (а не файл, на який вказує символьне посилання).


5

Можна використовувати

du -sh directory/

і

du -sh filename

знати місце, яке займає папка чи файл.

df -h

покаже використання диска у читаному для людини форматі - він це робить.

Існує також програма, заснована на gui Disk Usage Analyzer.


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