#include #include #include #include #include #include unsigned long long dirsiz (char *); void help (); void outull (unsigned long long); main (int a, char** v) { if (!--a) help (); ++v; int b; struct stat tmp; for (b=0;bd_name, ".") || !strcmp (tmp->d_name, "..")) continue; strcpy (tstr, fn); strcat (tstr, "/"); strcat (tstr, tmp->d_name); stat (tstr, &tp); if (S_ISDIR (tp.st_mode)) { closedir (di); ret += dirsiz (tstr); di = opendir (fn); struct dirent *temp; while (temp = readdir (di)) if (!strcmp (temp->d_name, tmp->d_name)) break; } else ret += tp.st_size; } closedir (di); return ret; } void outull (unsigned long long var) { unsigned suffix=0; float m; while (var>1024) { m = var/1024.0; var /= 1024; ++suffix; } printf ("%f %sB\n", m, suffix==1?"K":suffix==2?"M":suffix==3?"G":suffix==4?"T":""); //lol @ "T" }