3

Предположим, я создаю каталог test/ с двумя файлами (test/a , test/b) и внутренним каталогом test/c с файлом test/c/d , например так:

mkdir test
cd test
touch a
echo 1 > a
touch b
echo 1 > b
mkdir c
cd c
touch d
echo 1 > d
cd ../..
du test -ab

Выход последней строки (работает du):

2       test/a
4096    test/c
2       test/b
8196    test

Размер каталога составляет 8196 (вместо 6, который будет: размер файла + размер файла b + размер файла c/d). Это потому, что, насколько я понимаю, du включает в себя размер самих каталогов (потому что каталог - это просто специальный файл, в котором записываются записи файла).

Я не хочу этого Я хочу увидеть общий размер всех файлов в каталоге (способ, которым Windows Explorer сообщает о размере каталога). Таким образом, в этом примере результат должен быть:

2       test/a
2       test/c
2       test/b
6       test

Более того, что я действительно хочу, так это последняя строка: сумма размеров всех файлов в каталоге (рекурсивно).

Но я прошел через все варианты дю, и, кажется, нет способа сделать это. Там в любом случае?

3 ответа3

2

Если вам нужен только размер файлов, исключая пространство, занимаемое каталогами, вы можете сделать что-то вроде

$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6   total
1
$ ls -goR | awk '{sum += $3} END{print sum}'
16992

Редактировать. Чтобы исключить каталоги, используйте grep

$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
0

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

Для получения подробной информации, включая конкретные файлы, попробуйте это:

$ find test/ -exec du -s {} \;

20      test/
4       test/b
4       test/a
8       test/c
4       test/c/d

Просто для краткого изложения каждого каталога, попробуйте это:

$ find test/ -type d -exec du -s {} \;

20      test/
8       test/c

Надеюсь, это поможет вам?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .