Як визначити загальний розмір каталогу (папки) з командного рядка?


785

Чи є проста команда для відображення загального сукупного розміру (використання диска) усіх файлів у каталозі (папці)?

Я спробував це, і вони не роблять того, що я хочу:

  • ls -l, який відображає лише розмір окремих файлів у каталозі, ні
  • df -h, який відображає лише вільний та використаний простір на моїх дисках.



Приємне нагадування, що це може мати майже нульовий сенс у файловій системі CoW, як BTRFS.
val

Відповіді:


1265

Команда du"узагальнює використання диска кожного FILE, рекурсивно для каталогів", наприклад,

du -hs /path/to/directory
  • -hполягає в тому, щоб отримати цифри "читабельні для людини", наприклад, отримати 140Mзамість 143260(розмір у Кбайт)
  • -sє для підсумків (інакше ви отримаєте не тільки розмір папки, але і все, що знаходиться в папці окремо)

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

du -h | sort -h

-hПрапор на sortрозглядатиме значення розміру «читабельність».


Якщо ви хочете уникати рекурсивного переліку всіх файлів і каталогів, ви можете надати --max-depthпараметр, щоб обмежити кількість елементів, що відображаються. Найчастіше,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
повага за проходження зайвої милі. :)
myusuf3

93
Я використовую du -shабо DOOSH як спосіб запам'ятати його (ПРИМІТКА: команда така ж, просто організація прапорів командного рядка для цілей пам'яті)
Marco Ceppi

3
Існує корисний варіант, який називається - розмір марочного розміру. Він може бути використаний для пошуку фактичного розміру файлу чи каталогу (на відміну від його сліду на диску), наприклад, текстовий файл із лише 4 символами займе близько 6 байтів, але все одно відображатиметься як ~ 4 К у регулярний du -sh вихід. Однак, якщо ви передасте параметр --apparent-size, вихід буде 6. man du каже: - друк очевидних розмірів очевидних розмірів, а не використання диска; хоча очевидний розмір, як правило, менший, він може бути більшим через отвори у («розріджених») файлах, внутрішню фрагментацію, непрямі блоки
Hopping Bunny

4
Це працює і для OS X! Дякую, я дійсно шукав спосіб очистити файли як на моїй локальній машині, так і на моєму сервері, але автоматичні методи, здавалося, не спрацювали. Отже, я побіг du -hs *і зайшов у найбільший каталог і дізнався, які файли були такі великі ... Це такий хороший метод, і найкраща частина - вам нічого не потрібно встановлювати! Однозначно заслужив мою підсумку
Dev

@BandaMuhammadAlHelal Я думаю, що є дві причини: округлення ( duмає дещо своєрідне округлення, не показуючи десяткових знаків, якщо значення має більше однієї цифри у вибраній одиниці), і класичне видання 1024 проти 1000 . duє можливість -B(або --block-size) змінити одиниці, в яких вона відображає значення, або ви можете використовувати -bзамість того, -hщоб отримати "необроблене" значення в байтах.
Марсель Стімберг

164

Нещодавно я знайшов чудовий інтерактивний інструмент на основі ncurses, який швидко дає вам огляд розмірів каталогів. Шукали цей інструмент роками.

  • швидко розгортання через ієрархію файлів
  • Ви можете видалити, наприклад, величезні тимчасові файли зсередини інструменту
  • надзвичайно швидко

Подумайте про це як баобаб для командного рядка:

apt-get install ncdu

11
Це абсолютно фантастично! Як і DaisyDisk, для OSX
subZero

3
ncduдивовижно! Після його встановлення просто зробіть це ncdu /. Ви дуже швидко знайдете найбільші файли в системі. Також натисніть, hперебуваючи всередині консольного інтерфейсу ncdu. У ньому є дуже корисні ярлики
vlad-ardelean

Це ТОЧНО те, що мені було потрібно: так просто, так ефективно. Чисте кохання.
користувач3790897

52

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

du -hsc *


10

tree - це ще одна корисна команда для цієї роботи:

Просто встановіть його через sudo apt-get install treeі введіть наступне:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

З дерева людини :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

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

$ du -sch /home/vivek/* | sort -rh

Деталі

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Вихідні дані

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

Відповіді дали зрозуміти, що duце інструмент для пошуку загального розміру каталогу. Однак слід врахувати пару факторів:

  • Інколи duвихід може вводити в оману, оскільки він повідомляє про місце, виділене файловою системою, яке може відрізнятися від суми розмірів окремих файлів. Зазвичай файлова система виділяє для файлу 4096 байт, навіть якщо ви зберегли в ньому лише один символ!

  • Різниця на виході за рахунок потужності 2 та потужності 10 одиниць. -hПерехід до duділить число байт на 2 ^ 10 (1024), 2 ^ 20 (1048576) і т.д. , щоб дати чіткий вихід. Багато людей можуть бути більш звикли бачити сили 10 (наприклад, 1K = 1000, 1M = 1000000) і дивуватися результату.

Щоб знайти загальну суму розмірів усіх файлів у каталозі в байтах, виконайте:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Приклад:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

Find-ls-awk поверне неправильне значення для великих папок №1 . Для новіших див можна додати --bignumабо -M; якщо це не варіант, скористайтеся find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc №2 .
goozez

Якщо повноваження 2, що використовуються, є проблемою, є --siваріант: "як -h, але використовуйте повноваження 1000, а не 1024"
muru

1

Для лише розміру каталогу у читаному форматі використовуйте наведене нижче:

du -hs directoryname

Це, мабуть, не в правильному розділі, але в командному рядку ви можете спробувати:

ls -sh filename

-sЄ розміром, і -hє читаним людиною.

Використовуйте -lдля показу в lsсписку, як нижче:

ls -shl

0

du /foldernameє стандартною командою знати розмір папки. Найкраще знайти варіанти, прочитавши чоловічу сторінку:

man du

Ви повинні прочитати сторінку man (доступна в Інтернеті ), перш ніж використовувати команду.



0

Якщо у вашому бажаному каталозі є багато підкаталогів, використовуйте наступне:

$ cd ~/your/target/directory
$ du -csh 

-c, - загальна кількість створює велику сукупність
-s, --сумулює відображення лише загального для кожного аргументу
-h, - людсько-читабельних розмірів друку у читаному для людини форматі (наприклад, 1K 234M 2G)

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


-1

Найкращий, на мою думку, такий:

du -h directory_name | tail -n1

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

Варто додати, що якщо розмір папки великий, то du займає більше часу. Ви повинні бути терплячими, щоб ця команда працювала. Як і будь-яка інша команда unix, ви можете дізнатися загальний час для цього процесу, використовуючи timeперед цією командою:

time du -h directory_name | tail -n1

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