[расширенная версия]
Это будет намного быстрее и точнее, чем начальная версия ниже и будет выводить сумму всех размеров файла текущего каталога:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
команда stat -c %s
для файла вернет его размер в байтах. Команда tr
здесь используется для преодоления ограничений команды xargs
(очевидно, что добавление к xargs
разбивает результаты на большее количество строк, нарушая логику моей команды). Следовательно, tr
заботится о замене перевода строки знаком +
(плюс). sed
имеет единственную цель - удалить последний знак +
из результирующей строки, чтобы избежать жалоб от последней команды bc
(базовый калькулятор), которая, как обычно, выполняет математические вычисления.
Исполнения: Я протестировал его на нескольких каталогах и более ~ 150.000 файлов (текущее количество файлов в моем блоке fedora 15), что, как я считаю, является удивительным результатом:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
На случай, если вы захотите провести сравнение с командой du -sb /
, она выдаст примерное использование диска в байтах (опция -b
)
# du -sb /
12684646920 /
Как я и ожидал, это немного больше, чем мои командные вычисления, потому что утилита du
возвращает выделенное пространство каждого файла, а не фактическое использованное пространство.
[начальная версия]
Вы не можете использовать команду du
, если вам нужно знать точный размер вашей папки, потому что (согласно цитате из справочной страницы) du
оценивает использование файлового пространства. Следовательно, это приведет вас к неверному результату, приближенному (возможно, близкому к размеру суммы, но, скорее всего, больше, чем фактический размер, который вы ищете).
Я думаю, что могут быть разные способы ответить на ваш вопрос, но это мой:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
Находит все файлы в. каталог (измените. на любой каталог, который вам нравится), также включены скрытые файлы и (используя xargs
) выводит их имена в одну строку, а затем создает подробный список, используя ls -l
. Этот (иногда) огромный вывод передается по команде обрезки, и берется только пятое поле (-f5
), то есть размер файла в байтах, и снова передается по отношению к xargs
, что снова дает одну строку размеров, разделенных пробелами. Теперь примените магию sed, которая заменяет каждое пробел знаком плюс (+
) и, наконец, bc
(базовый калькулятор) выполняет математику.
Возможно, потребуется дополнительная настройка, и у вас может быть команда ls
, жалующаяся на слишком длинный список аргументов.