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

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

797 голосов | спросил Abdul Al Hazred 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 20:21:19 +0300000000pmThu, 19 Feb 2015 20:21:19 +030015 2015, 20:21:19

15 ответов


1141

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
    
ответил sam 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 20:23:45 +0300000000pmThu, 19 Feb 2015 20:23:45 +030015 2015, 20:23:45
255

Просто используйте команду du:

du -sh *

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

Вы можете использовать команду df, чтобы узнать свободное пространство на диске:

df -h .
ответил Vineet Sharma 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 21:30:06 +0300000000pmThu, 19 Feb 2015 21:30:06 +030015 2015, 21:30:06
142

du - ваш друг. Если вы просто хотите узнать общий размер каталога, перейдите в него и запустите:

du -hs

Если вы также хотели бы узнать, какие подпапки занимают объем дискового пространства ?! Вы можете расширить эту команду до:

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

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

ответил Chrispie 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 20:32:19 +0300000000pmThu, 19 Feb 2015 20:32:19 +030015 2015, 20:32:19
27

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

ответил Tblue 20 FebruaryEurope/MoscowbFri, 20 Feb 2015 01:41:00 +0300000000amFri, 20 Feb 2015 01:41:00 +030015 2015, 01:41:00
27

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

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

 ncdu

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

ответил Teque5 6 FebruaryEurope/MoscowbMon, 06 Feb 2017 08:39:26 +0300000000amMon, 06 Feb 2017 08:39:26 +030017 2017, 08:39:26
20

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

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

du -h (file name)
ответил jackotonye 19 FebruaryEurope/MoscowbThu, 19 Feb 2015 21:20:49 +0300000000pmThu, 19 Feb 2015 21:20:49 +030015 2015, 21:20:49
15

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

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

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

du -csbh .
ответил Andy Foster 23 Maypm16 2016, 16:41:26
10

лично я считаю, что это лучше всего, если вы не хотите использовать ncdu

# du -sh ./*
ответил ConnerMan 19 FebruaryEurope/MoscowbFri, 19 Feb 2016 19:46:50 +0300000000pmFri, 19 Feb 2016 19:46:50 +030016 2016, 19:46:50
9
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
ответил mpen 2 MaramWed, 02 Mar 2016 02:09:48 +03002016-03-02T02:09:48+03:0002 2016, 02:09:48
6

I используйте эту команду как root :

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh
ответил Eduard Florinescu 24 +03002015-10-24T01:43:00+03:00312015bEurope/MoscowSat, 24 Oct 2015 01:43:00 +0300 2015, 01:43:00
5

Вот функция для вашего .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/
ответил feldversuch 9 Jam1000000amMon, 09 Jan 2017 01:28:33 +030017 2017, 01:28:33
4

найти все файлы в текущей директории рекурсивно и суммировать их размер:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
ответил Leon Chang 6 TueEurope/Moscow2016-12-06T15:53:20+03:00Europe/Moscow12bEurope/MoscowTue, 06 Dec 2016 15:53:20 +0300 2016, 15:53:20
2

Еще один вариант:

du -h --max-dep=1
ответил 0x8BADF00D 4 52016vEurope/Moscow11bEurope/MoscowFri, 04 Nov 2016 00:24:01 +0300 2016, 00:24:01
2

Вы можете использовать

du -sh directory/

и

du -sh filename

, чтобы узнать пространство, занимаемое папкой или файлом.

df -h

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

Существует также программа на основе gui, называемая Disk Usage Analyzer.

ответил arupgsh 6 FebruaryEurope/MoscowbMon, 06 Feb 2017 10:25:55 +0300000000amMon, 06 Feb 2017 10:25:55 +030017 2017, 10:25:55
2

Вот сценарий POSIX, который будет работать с:

  • Файл
  • Файлы
  • Каталог
  • Каталоги
 #!/bin/sh
ls -ARgo "[email protected]" | awk '{q += $3} END {print q}'

Источник

ответил Steven Penny 10 MaramFri, 10 Mar 2017 08:50:33 +03002017-03-10T08:50:33+03:0008 2017, 08:50:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132