diff options
Diffstat (limited to '')
| -rw-r--r-- | cleanup.c | 58 | 
1 files changed, 39 insertions, 19 deletions
| @@ -22,6 +22,7 @@  #include <fts.h>  #include <err.h> +#include <errno.h>  #include <math.h>  #include <stdio.h>  #include <time.h> @@ -30,7 +31,7 @@  const double mind = 30.0;  const double maxd = 90.0;  const double max_size = 33554432; // 32MB -char* paths[1] = {"/var/www/users/tmp"}; +char* paths[2] = {"/var/www/users/~tmp", NULL};  int  main(int argc, char * const argv[]) @@ -43,30 +44,49 @@ main(int argc, char * const argv[])  	double file_age = 0;  	time_t curr_time = time(NULL); -	file_system = fts_open(paths, 0, NULL); +	int verbose, ch; -	if (file_system != NULL) { -		while ((node = fts_read(file_system)) != NULL) { -			switch (node->fts_info) { -			case FTS_F: -				if (stat(node->fts_name, &attr) == -1) -					err(1, NULL); -				file_age = difftime(curr_time, attr.st_mtime); -				cutoff = mind + (mind - maxd) * \ -					pow((double) attr.st_size / (double) max_size - 1, 3.0); +	verbose = 0; +	while ((ch = getopt(argc, argv, "v")) != -1) { +		switch (ch) { +		case 'v': +			verbose = 1; +			break; +		} +	} +	argc -= optind; +	argv += optind; + +	if ((file_system = fts_open(paths, 0, NULL)) == NULL) +		errx(1, NULL); -				if (file_age >= cutoff) { -					// printf("%s age %fs cuttoff %fs size %lld B delete\n", \ -					// node->fts_name, file_age, cutoff, attr.st_size); -					unlink(node->fts_name); -				} -				break; -			default: -				break; +	while ((node = fts_read(file_system)) != NULL) { +		if (node->fts_errno) +			err(node->fts_errno, "%s", node->fts_path); + +		switch (node->fts_info) { +		case FTS_F: +			if (stat(node->fts_name, &attr) == -1) +				err(1, NULL); +			file_age = difftime(curr_time, attr.st_mtime); +			cutoff = mind + (mind - maxd) * 86400 * +				pow((double) attr.st_size / (double) max_size - 1, 3.0); +			if (verbose) +				printf("%s age %fs cuttoff %fs size %lldB\n", +				       node->fts_name, file_age, cutoff, attr.st_size); +			if (file_age >= cutoff) { +				unlink(node->fts_name); +				if (verbose) +					printf("%s deleted\n", node->fts_name);  			} +			break; +		default: +			break;  		}  	} +	fts_close(file_system); +  	return 0;  } | 
