Как получить размер директории Linux или Mac OS X из командной строки? [дубликат]

5
задан Journeyman Geek
23.02.2023 6:25 Количество просмотров материала 3395
Распечатать страницу

5 ответов

версия BSD du используется в OS X сообщает размер с 512-байтовыми блоками-размеры по существу округляются до следующего 512-байтового значения. Это говорит вам космос на диске, который большле чем количество данных. Если у вас много маленьких файлов, разница может быть большой.

вот пример.

это значение с регулярным du. Он в 512-байтовых блоках:

$ du -s
248   .

-h результаты флага в более читаемом номере, внутри килобайты. Как и ожидалось, это половина числа 512-байтовых блоков:

$ du -hs
124K  .

наконец, вы можете использовать find и awk чтобы дать вам сумму фактических байтов в файлах. Это своего рода медленно, но это работает:

$ find . -type f -exec ls -l {} \; | awk '{sum += } END {print sum}'
60527

это значение в точности соответствует числу, указанному в окне "Информация о поиске". (В этом наборе файлов нет странных форков или xattrs.) Это значительно меньше, чем значение, о котором сообщает du.

вот как это работает: он получает список всех файлов и передает их ls -l; затем awk используется для подсчета байтов. The -type f флаг есть, так что только файлы (а не папки) вам отправлено ls. Без этого флага он также будет отправлять имена каталогов в ls, и каждый файл будет указан дважды: один раз как отдельный файл и один раз как элемент в каталоге.

версия GNU du может давать значения в байтах, а не в блоках. Очень жаль, что версия BSD du - это не так гибко.

77
отвечен wch 2023-02-24 14:13

показать размер одного файла

du -h path_to_a_file

показать размер содержимого каталога, каждого подкаталога и каждого отдельного файла:

du -h path_to_a_directory

показать размер содержимого каталога:

du -sh path_to_a_directory

73
отвечен Daryl Spitzer 2023-02-24 16:30

du - говорит использовать диск не размер файла.

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=} END {print b}'

выше код терминала (im на osx 10.6) предлагает для меня лучший результат и waaay быстрее, чем "найти ... - exec"

быстрый тест

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += } END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s
9
отвечен Acid 2023-02-24 18:47

можно использовать du -ah . которая отображает размер всех файлов и директорий рекурсивно.

это можно комбинировать с sort, так что вы увидите ТОП-20 самых больших каталогов в текущей папке:

du -ah . | sort -rh | head -20

Примечание: Option -h на sort недоступно в OSX / BSD, поэтому вы должны установить sort С coreutils (например, via brew) и примените путь bin к PATH, например,

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

в противном случае используйте:

du -a . | sort -rn | head -20
5
отвечен kenorb 2023-02-24 21:04

Я объединил все ваши approuches и объединил его с человеком читаемым выходом результат:

#!/bin/sh
find  -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=} END {print b}' | awk '{ sum= ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

ссылка на Гист: https://gist.github.com/mlegenhausen/9365461

2
отвечен malte 2023-02-24 23:21

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх