как получить размер dir программно в Linux?

Добавляет немного цвета (поскольку pretty-format недоступно)

[alias]
    branchdate = for-each-ref --sort=-committerdate refs/heads/ --format="%(authordate:short)%09%(objectname:short)%09%1B[0;33m%(refname:short)%1B[m%09"
5
задан 15 July 2009 в 05:08
поделиться

2 ответа

Типичное решение

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

Информация

Вот ссылка для начала:

http://www.cs.utk.edu/~plank /plank/classes/cs360/360/notes/Prsize/lecture.html

Search

Искать в Google с помощью 'stat c program рекурсивного размера каталога'

Пример

Непосредственно с веб-сайта Джима Планка, служащего пример для начала работы.

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

main()
{
  DIR *d;
  struct dirent *de;
  struct stat buf;
  int exists;
  int total_size;

  d = opendir(".");
  if (d == NULL) {
    perror("prsize");
    exit(1);
  }

  total_size = 0;

  for (de = readdir(d); de != NULL; de = readdir(d)) {
    exists = stat(de->d_name, &buf);
    if (exists < 0) {
      fprintf(stderr, "Couldn't stat %s\n", de->d_name);
    } else {
      total_size += buf.st_size;
    }
  }
  closedir(d);
  printf("%d\n", total_size);
}
9
ответ дан 18 December 2019 в 10:48
поделиться

Вам необходимо stat () все файлы в текущем каталоге и подкаталогах и сложить их.

Рассмотрите возможность использования для этого рекурсивного алгоритма.

4
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

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