Как определить общий размер каталога (папки) из командной строки?


787

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

Я пробовал это, и они не делают то, что я хочу:

  • ls -l, который отображает только размер отдельных файлов в каталоге, ни
  • df -h, который отображает только свободное и использованное пространство на моих дисках.



Дружеское напоминание, что это может иметь почти нулевой смысл в файловой системе CoW, такой как BTRFS.
вал

Ответы:


1268

Команда du«суммирует использование диска каждого ФАЙЛА, рекурсивно для каталогов», например,

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 как способ запомнить его (ПРИМЕЧАНИЕ: команда та же самая, только организация флагов командной строки для целей памяти)
Марко Чеппи

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

4
Это работает и для OS X! Спасибо, я действительно искал способ очистки файлов, как на моей локальной машине, так и на моем сервере, но автоматические методы, похоже, не работали. Итак, я побежал du -hs *и зашел в самый большой каталог и выяснил, какие файлы были такими большими ... Это такой хороший метод, и лучшая часть в том, что вам не нужно ничего устанавливать! Определенно заслужил мое upvote
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

Это именно то, что мне нужно: так просто, так эффективно. Чистая любовь.
user3790897

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 . Для более нового awk вы можете добавить --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

Вы должны прочитать справочную страницу (доступна онлайн ), прежде чем использовать команду.



0

Если в вашем нужном каталоге много подкаталогов, используйте следующее:

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

-c, --total вывести итоговое значение
-s, --summarize отображать только итоговое значение для каждого аргумента
-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.