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

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

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

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

Команда 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

Недавно я нашел отличный интерактивный инструмент на основе ncurses, который быстро дает вам представление о размерах каталогов. Искал такой инструмент в течение многих лет.

  • быстрая детализация файловой иерархии
  • вы можете удалить, например, огромные временные файлы изнутри инструмента
  • чрезвычайно быстрый

Думайте об этом как баобаб для командной строки:

apt-get install ncdu

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

du -hsc *

Наслаждайтесь!

du foldername

Дополнительная информация об этой команде здесь

Ниже приведено то, что я использую для печати общего количества, размера папки и файла:

$ 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/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

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.)

Ответы сделали очевидным, что 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 1255729664$ find .  -ls | awk '{sum += $7} END {print sum}'249008169

Вы можете использовать инструмент Пыль:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

Мой пример взят из Windows, но также поддерживаются Linux и Apple:

https://github.com/bootandy/dust

Я приучен к ll команда, которая имеет псевдоним для ls -alF. В нем просто отсутствует количество файлов и размер файлов внизу. Я играл с du и tree но не смог получить нужные мне итоговые данные. Поэтому я создал lll чтобы сделать это для меня.

В вашем ~/.bashrc разместите следующее:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

Сохраните файл и выделите его с помощью . ~/.bashrc (или вы можете перезапустить свой терминал).


Образец выходного сигнала

Самое приятное в том, что ll результат - это его цвета. Это поддерживается с помощью lll но теряется при использовании find или du:

lll sample output.png


ТЛ;Д-Р

Бонусная функция, которую вы можете добавить к ~/.bashrc называется BytesToHuman(). Это делает то, что ожидает большинство пользователей консоли, преобразуя большие числа в MiB, GiB и т.Д:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

Затем переверните комментарий между двумя строками в lll () функция должна выглядеть следующим образом:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Теперь ваш вывод выглядит следующим образом:

lll sample output 2.png

Как всегда, не забудьте обновить исходный код с помощью . ~/.bashrc всякий раз, когда вносятся изменения. (Или, конечно, перезагрузите терминал)

PS - Две недели в карантине наконец-то дали мне время поработать над этой пятилетней целью.

du /foldername это стандартная команда для определения размера папки. Лучше всего найти варианты, прочитав справочную страницу:

man du

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

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