Как я могу вычислить размер каталога?

Вы могли также использовать команду "для подсчета количества слов" (wc):

wc -c "$filename" | awk '{print $1}'

Проблема с wc это, это добавит имя файла и расположит вывод с отступом. Например:

$ wc -c somefile.txt
    1160 somefile.txt

Если требуется постараться не объединять в цепочку полный интерпретируемый язык или потокового редактора только для получения количества размера файла, просто перенаправьте вход из файла так, чтобы wc никогда не видит имени файла:

wc -c < "$filename"

Эта последняя форма может использоваться с заменой команды для легкого захвата значения, которое Вы искали как переменная оболочки, как упомянуто Gilles ниже.

size="$(wc -c <"$filename")"

187
02.12.2011, 20:14
12 ответов
du -s directory_name

Или получить человекочитаемый вывод:

du -sh directory_name

-s опция означает, что не перечислит размер для каждого подкаталога, только общий размер.

242
27.01.2020, 19:28
  • 1
    На самом деле duединица по умолчанию является 512-байтовыми блоками согласно POSIX и килобайтами на Linux (если переменная среды POSIXLY_CORRECT установлен), или с du -k. –  Gilles 'SO- stop being evil' 12.10.2010, 20:49
  • 2
    @Gilles: Хорошая выгода. Я удалил "число байтов", укусил из моего ответа. –  sepp2k 12.10.2010, 20:53
  • 3
    работал предписанным –  skidadon 28.05.2015, 22:17
  • 4
    , если каталог является очень большим и имеет много подкаталогов, требуется много времени... почти 1 минута. это нормально? существует ли способ получить размер более быстро? –  yeahman 15.10.2015, 22:59
  • 5
    я должен был вычислить размер своей папки "сумка", du -sh bag работавший отлично! –  António Almeida 04.03.2016, 14:15

можно также использовать ls-ldh:

ls -ldh /etc drwxr-xr-x 145 root root 12K 2012-06-02 11:44 /etc

- l для длинного списка;-d для отображения информации о dir, не, содержание dir,-h для того, чтобы отобразить размер в huma читаемом формате.

0
27.01.2020, 19:28
  • 1
    Это не корректно, человек, спрашивающий, ясно ищет место каталога, и это - содержание на диске. Ответ @sepp2k корректен. –  blong 05.06.2012, 16:16
  • 2
    Это не корректно, человек, спрашивающий, ясно ищет место каталога, и это - содержание на диске. Ответ @sepp2k корректен. –  blong 05.06.2012, 16:16
  • 3
    ls-ldh управляют, только показывает размер inode структуры каталога. Метрика является отражением размера индексной таблицы имен файлов, но не фактическим размером содержания файла в рамках каталога. –  linbianxiaocao 28.03.2016, 21:19

GNU DU принимает вариант -B .

См. Page MAN и страница для получения дополнительной помощи:

-B , - BYTES эквивалентно - видимый размер - размер - размер = 1

7
27.01.2020, 19:28

Я всегда устанавливаю пакет "ncdu" и вижу все выходные данные всех каталогов в графическом представлении. Это потому, что мне обычно нужно знать, что занимает больше всего места на диске на моих машинах, независимо от того, многое резюмирует один каталог.

Использование: sudo ncdu / (Вам не требуется sudo для папок, для которых у вас есть разрешение на чтение).

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

0
27.01.2020, 19:28

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

cd /    
sudo du -sh ./*
7
27.01.2020, 19:28
du -csh

-c дает общий итог

1
27.01.2020, 19:28

Try

du -hax --max-depth=1 / | grep '[0-9]G' | sort -nr

Это поможет найти большие каталоги, чтобы затем просеять их с помощью du -sh ./*

1
27.01.2020, 19:28

Можно использовать "file-size. sh" из библиотеки awk Velour:

ls -ARgo "$@" | awk '{q += $3} END {print q}'
1
27.01.2020, 19:28

du -hd1

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

656K   ./rubberband
2.2M   ./lame
652K   ./pkg-config
6
27.01.2020, 19:28

Я попытался использовать приведенную ниже команду, так как уже был предоставлен лучший ответ

sudo find. -maxdepth 1 -exec du -shk {} \;| awk 'NR >1'| awk 'BEGIN{sum=1}{sum=sum+$1}END{print sum}'

выход

 sudo find. -maxdepth 1 -exec du -shk {} \;| awk 'NR >1'| awk 'BEGIN{sum=1}{sum=sum+$1}END{print sum}'

679445
0
27.01.2020, 19:28

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

Я обнаружил, что вычисление 'du' может различаться между серверами с разделами одинакового размера, использующими одну и ту же файловую систему. Если характеристики файловой системы отличаются, это имеет смысл, но в противном случае я не могу понять, почему. Ответ «ls|awk», который дал Стивен Пенни, дает более последовательный ответ,но все же дал мне противоречивые результаты с очень большими списками файлов.

Использование «найти» дало согласованные результаты для более чем 300 000 файлов, даже при сравнении одного сервера, использующего XFS, и другого, использующего EXT4. Поэтому, если вы хотите узнать общее количество байтов данных во всех файлах, я предлагаю это хороший способ получить его:

find /whatever/path -type f -printf "%s\n"|awk '{q+=$1} END {print q}'
1
27.01.2020, 19:28

du -ahd 1 | sort -hбудет иметь лучшую визуализацию, которая отсортировала элементы.

$ du -ahd 1 | sort -h

2.1M   ./jinxing.oxps
2.1M   ./jx.xps
3.5M   ./instances_train2014_num10.json
5.9M   ./realsense
7.8M   ./html_ppt
8.5M   ./pytorch-segmentation-toolbox
24M./bpycv
24M./inventory-v4
26M./gittry
65M./inventory
291M   ./librealsense
466M   .
1
17.04.2021, 13:49

Теги

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