4

У меня есть большое количество папок, каждая из которых содержит довольно много файлов разного размера (от нескольких байтов до 400 КБ или около того), в основном меньших по размеру. Мне нужно получить фактический (не использование диска) размер этих папок. Есть ли способ сделать это с помощью команды, как 'du'?

4 ответа4

3

Для ls стандартно показывать истинные размеры файлов по умолчанию, и я только что это подтвердил. Так:

ls -l <yourfiles>

Чтобы подвести итоги:

ls -l <yourfiles> | awk '{sum+=$5} END {print sum}'

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

find <yourdir>/. -type f -exec ls -l '{}' \; | awk '{sum+=$5} END {print sum}'
2

Вы можете запросить итоги Mac-world (включая ветки ресурсов) следующим образом:

# Put this in a shell function or script, 'macTotal'
osascript - "${1:-.}" <<\EOF | perl -Mbignum -lpe '$_+=0,"\n"'
on run {arg}
    alias POSIX file arg
    tell application "System Events" to get size of result
end run
EOF

$ macTotal ~/Library
4465742628

AppleScript печатает число в научной нотации. Код Perl - неаккуратный способ расширить научную нотацию.

Если у вас все в порядке с чтением чисел из графического интерфейса, просто откройте информационное окно папки в Finder. Указанный размер такой же, как и в системных событиях AppleScript.


Если вы просто заботитесь о разветвлениях данных, я бы пошел с чем-то похожим на ответ pra, но с использованием stat вместо ls и xargs вместо -exec для большей эффективности.

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

Чтобы увидеть всего одну конкретную папку, используйте:

du -s /path_to /specific_folder /

Чтобы просмотреть общее количество каждой папки в одной конкретной папке, используйте звездочку:

du -s /path_to /specific_folder /*

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

Изменить: Ах, я понимаю, что вы спрашиваете сейчас. Ты хочешь:

du -sk /path_to /specific_folder /

1

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

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