Как получить размер каталога в командной строке?


1066

Я попытался получить размер каталога (содержащего каталоги и подкаталоги) с помощью 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

Ответы:


1492

du -sh file_path

объяснение

  • du( d isc u sage) команда оценивает использование пространства file_path
  • Варианты -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
... если у вас нет
жестких

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 *не показывает использование в памяти скрытых папок
Прашант Прабхакар Сингх

4
du -sh -- * .*включить точечные файлы. Это полезно для включения .git, например, большого каталога. В качестве альтернативы в zsh вы можете использовать setopt globdotsфайлы точек по умолчанию.
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-deep = 1 | sort
-rn

@richhallstoke, если вы используете ncduфайлы, по умолчанию сортируются по убыванию.
Armfoot

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

67

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

Сделайте свою жизнь легкой и удобнойncdu .

ncdu

Вы получаете по каждой папке резюме, которые легко просматриваются.


9
Это должен быть правильный ответ, по крайней мере, для тех, кто может установить программное обеспечение в системе. К сожалению, я не думаю, что большинство людей прокрутят достаточно далеко, чтобы увидеть это.
DavidR

@ RickyNotaro-Garcia Нет, это игнорирует скрытые объекты и висит на больших каталогах. Вполне возможно, что есть правильное решение с дюжиной труб, но зачем тратить свою жизнь.
Teque5

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

2
ncduотлично, я всегда ищу эту команду, когда забываю. Это быстро, легко ориентироваться и помогает легко находить большие папки. К вашему сведению, он также доступен для macOS и, вероятно, для всех компьютеров с Linux.
Лукас

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

32

Другие упоминали du, но я также хотел бы упомянуть Ncdu, который является версией ncurses duи обеспечивает интерактивность: вы можете непосредственно изучить иерархию каталогов и увидеть размеры подкаталогов.


26

Команда duпоказывает использование файла диском.

-hОпция показывает результаты в удобочитаемой форме (например, 4k, 5M, 3G).

du -h (file name)

22

Во всех приведенных выше примерах будет указан размер данных на диске (т. Е. Объем дискового пространства, используемого конкретным файлом, который обычно больше, чем фактический размер файла). В некоторых ситуациях они не дают точного отчета, если данные на самом деле не хранятся на этом конкретном диске и существуют только ссылки на иноды.

В вашем примере вы использовали ls -l для одного файла, который будет возвращать фактический размер файла, а НЕ его размер на диске.

Если вы хотите узнать фактические размеры файлов, добавьте опцию -b в du.

du -csbh .

Да. Я использую sdfs, который сжимает и выводит файлы, поэтому я не мог понять, почему он сообщает о таких низких цифрах. Действительный размер файлов с помощью ls можно найти с помощью: du -b
Райан Шиллингтон,

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

К вашему сведению, кажется, что сообщается о размере на диске. то есть он, вероятно, будет дополнен до ближайшего 4KB.
mpen


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

покажет использование диска в удобочитаемом формате -h делает это.

Существует также программа на основе графического интерфейса Disk Usage Analyzer.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.