Как получить размер каталога в командной строке?
Я попытался получить размер каталога (содержащий каталоги и подкаталоги) с помощью команды ls
с опцией l
. Кажется, что он работает для файлов (ls -l file name
), но если я попытаюсь получить размер каталога (например, ls -l /home
), Я получаю только 4096 байт, хотя в целом он намного больше.
15 ответов
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
Просто используйте команду du
:
du -sh *
предоставит вам размер всех каталогов, файлов и т. д. в текущем каталоге в удобном для чтения формате.
Вы можете использовать команду df
, чтобы узнать свободное пространство на диске:
df -h .
du
- ваш друг. Если вы просто хотите узнать общий размер каталога, перейдите в него и запустите:
du -hs
Если вы также хотели бы узнать, какие подпапки занимают объем дискового пространства ?! Вы можете расширить эту команду до:
du -h --max-depth=1 | sort -hr
, который даст вам размер всех подпапок (уровень 1). Вывод будет отсортирован (самая большая папка сверху).
Другие упомянули du
, но я также хотел бы упомянуть Ncdu - который является версией ncurses du
и обеспечивает интерактивность: вы можете напрямую изучить иерархию каталогов и посмотреть размеры подкаталогов.
du
может быть сложным в использовании, поскольку вы должны, по-видимому, передать 100 аргументов, чтобы получить достойный вывод. И выяснение размера скрытых папок еще более жесткое.
Сделайте вашу жизнь легкой и используйте ncdu
.
Вы получаете сведения о папках, которые легко просматриваются.
Команда du
показывает использование диска в файле.
Опция -h
показывает результаты в форме, читаемой человеком (например, 4k, 5M, 3G).
du -h (file name)
Все приведенные выше примеры расскажут вам о размерах данных на диске (т. е. количестве дискового пространства, используемого конкретным файлом, который обычно больше фактического размера файла). Есть ситуации, когда они не дают вам точного отчета, если данные на самом деле не хранятся на этом конкретном диске и существуют только ссылки inode.
В вашем примере вы использовали ls -l в одном файле, который вернет фактический размер файла, а не его размер на диске.
Если вы хотите узнать фактические размеры файлов, добавьте параметр -b в du.
du -csbh .
лично я считаю, что это лучше всего, если вы не хотите использовать ncdu
# du -sh ./*
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
I используйте эту команду как root :
sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh
Вот функция для вашего .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/
найти все файлы в текущей директории рекурсивно и суммировать их размер:
find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
Еще один вариант:
du -h --max-dep=1
Вы можете использовать
du -sh directory/
и
du -sh filename
, чтобы узнать пространство, занимаемое папкой или файлом.
df -h
покажет использование диска в удобочитаемом формате - он делает это.
Существует также программа на основе gui, называемая Disk Usage Analyzer
.
Вот сценарий POSIX, который будет работать с:
- Файл
- Файлы
- Каталог
- Каталоги
#!/bin/sh
ls -ARgo "[email protected]" | awk '{q += $3} END {print q}'