Как рекурсивно найти сумму, хранящуюся в каталоге?

136

Я знаю, что вы можете видеть размер файла в байтах, когда делаете длинный листинг с помощью llили ls -l. Но я хочу знать, сколько места в каталоге, включая файлы в этом каталоге и подкаталогах в нем, и т. Д. Я не хочу количество файлов, но вместо этого объем памяти, который занимают эти файлы.

Итак, я хочу знать, сколько памяти находится в определенном каталоге рекурсивно? Я предполагаю, что если есть команда, она будет в байтах.

Роб Эйвери IV
источник

Ответы:

146

Попробуйте сделать это:

du -s dir

или же

du -sh dir

нужна -hподдержка, зависит от вашей ОС.

Видеть

man du
Жиль Квено
источник
2
добавить -bк выводу в байтах
pcnate
4
--all перечисляет все файлы и -h показывает размер файла в удобочитаемом формате du -h --all
Praneeth
29

Вы просто делаете:

du -sh /path/to/directory

где -sдля краткости и -hдля человека удобочитаемым ( нестандартный вариант).

Будьте осторожны , однако, в отличие ls, это не покажет вам размер файла , но использование диска (т.е. кратен файловой системы размер блока), но файл может быть меньше, или даже больше, так что вы можете использовать --apparent-sizeопцию:

du -sh --apparent-size /path/to/directory

Это размер, который был бы передан по сети, если бы вам пришлось.

Действительно, в файле могут быть «дыры» (пустая оболочка), он может быть меньше размера блока файловой системы, может быть сжат на уровне файловой системы и т. Д. Справочная страница объясняет это.

Как Никлас указывает , вы можете также использовать ncduанализатор использования диска. Запущенный из каталога, он покажет вам, какие папки и файлы используют дисковое пространство, упорядочив их по размеру от наибольшего к меньшему.

Вы также можете увидеть этот вопрос .

Totor
источник
19

Обратите внимание, что если вы хотите узнать размер всех папок {sub} внутри каталога, вы также можете использовать опцию -dor (которая принимает аргумент: рекурсивное ограничение)--max-depthdu

Например :

du -h /path/to/directory -d 1

Покажет вам что-то вроде

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: ввод 0в качестве рекурсивного лимита эквивалентен -sопции. Эти 2 команды дадут вам один и тот же результат (ваш рекурсивный размер каталога, понятный человеку):

du -h /path/to/directory -d 0
du -sh /path/to/directory
Фло Шильд
источник
-d 1должен быть до пути к каталогу
Abhinav Singi
Потребности? Это работает для меня после пути к каталогу, в Ubuntu / Debian. Хотя лучше иметь его раньше, я согласен
Flo Schild
14

Альтернативой уже упомянутой duкоманде будет ncduхороший анализатор использования диска для использования в терминале. Возможно, вам придется сначала установить его, но он доступен в большинстве репозиториев пакетов.

Изменить: Формат вывода см. Эти скриншоты http://dev.yorhel.nl/ncdu/scr

Никлас
источник
Чудо! При этом я вижу, какие папки содержат большой объем дискового хранилища. Я даже нашел все мои файлы, которые были загадочно исчезли. Отличный инструмент это.
Фарон
11

Это даст вам список размеров из текущего каталога, включая папки (рекурсивные) и файлы.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
Саймон Лю
источник
3
заказать по размеру: du -hs * | sort -hs
Кайзер
3

В Unix каталог просто содержит имена и ссылки на объекты файловой системы (inode, которые могут ссылаться на каталоги, файлы или некоторые другие экзотические вещи). Файл может находиться под несколькими именами в одном и том же каталоге или находиться в нескольких каталогах. Таким образом, «пространство, используемое каталогом и файлами внутри» действительно не имеет смысла, так как файлы не «внутри».

Тем не менее, команда du(1)перечисляет пространство, используемое каталогом, и все, что доступно через него, du -sдает сводку, а -hнекоторые реализации, такие как GNU, duдают «читабельный» вывод (т. Е. Килобайт, мегабайт).

vonbrand
источник
1

Для меня это работало задом наперед в случае глубины и пути на OS X El Capitán

du -h -d 1 /path/to/directory
GZepeda
источник
1

Вы можете использовать "file-size.sh" из библиотеки awk Velor :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
Стивен Пенни
источник