LINUX.ORG.RU

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


2

1

Операционная система Windows, при подсчете размера каталога учитывает только размеры всех вложенных файлов, включая файлы в подкаталогах. Linux же считает еще и размеры самих каталогов( каталог с точки зрения linux - специальный файл, содержащий информацию о файлах внутри каталога, то есть тоже файл ). Вот небольшой пример:

user@user-PC:~$ mkdir dir user@user-PC:~$ du -sb dir 4096 dir

Из примера видно, что пустой каталог занимает 4096. Если в нем есть файлы то 4096+размер файлов. Как делать подсчет размера только файлов каталога, и файлов в подкаталогах, исключив размеры самого каталога и других подкаталогов в каталоге? Нужно решение, чтобы можно было считать большие объемы данных(более 2^32 байт = более 4ГБ). Пробовал какие-то скрипты, но там размер переменной ограничен и выводит в виде степени 10-ти, а мне нужно в байтах.

Ответ на: комментарий от Frakhtan-teh

валится куча ошибок вида:

du: невозможно получить доступ к «нужно»: Нет такого файла или каталога

таких файлов\каталогов действительно нет

kquick ()
Ответ на: комментарий от anonymous

Спасибо это то, что нужно. Из примеров работает как хотелось только первое решение:

$ find dir -type f -print0 | du -scb --files0-from=- | tail -n 1 244068171123 итого

Второе выводит в виде степени:

$ ls -lnR /media/HDD/Back/ | grep -v '^d' | awk '{total += $5} END {print total, "Total"}' 2.43641e+11 Total

kquick ()
Ответ на: комментарий от kquick

Второе выводит в виде степени:

Что за система? printf же, пробуй так: ls -lnR | grep -v '^d' | awk '{total += $5} END {printf("%d Total\n", total)}'

anonymous ()

мне больше нравятся пустые директории по 128кб. у оффтопа также, кстати

wakuwaku ★★★★ ()
Последнее исправление: wakuwaku (всего исправлений: 1)
Ответ на: комментарий от anonymous

gawk, в приницпе, всегда, когда число слишком большое для int, преобразовывал его во float. Раньше у него была граница 2^31, а сейчас 2^63. И, если у ТС awk считает число float'ом, то вывод его как целого не поможет, так как ТС нужен результат в байтах со всеми значащими цифрами.

mky ★★★★★ ()

du -sb --apparent-size dir подсчитает точный размер всех файлов в каталоге.

du -sb dir считает вообще не пойми что (зависит от конкретной ФС). По идее, это должно показывать объём, который директория и все её файлы занимают _на диске_, но в современных ФС, которые упаковывают файлы в таблицу inode и вообще чего только не делают, это не работает. Допустим, в reiser4 с пустой dir это вернёт 2 (. и ..).

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

find dir -type f -print0 | du -scb --files0-from=- | tail -n 1

считает точный размер только файлов, полностью совпадающий с результатом в Windows.

--apparent-size

Как я понимаю печатает сколько физически они занимают на диске, мне это не подходит. Мне нужен именно суммарный размер всех файлов в байтах, а не то сколько они там занимают на конкретном диске или в конкретной файловой системе. Решение, предложенное anonymous, и описанное здесь: http://superuser.com/questions/602818/how-to-get-the-actual-directory-size-out-of-du мне вполне подходит.

kquick ()

линукс - ядро
а гну/пердаликс - ОСь от бородача с ядром линукс

ubuntuawp ★★ ()

Вычитай из размера 4096, можешь написать для этого скриптик и заалиасить в du. Очевидно же!

amomymous ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.