Initial release.
This commit is contained in:
parent
5d2797efae
commit
af0347d903
|
@ -0,0 +1,8 @@
|
||||||
|
include GNUmakerules
|
||||||
|
|
||||||
|
all: waste
|
||||||
|
|
||||||
|
errno:
|
||||||
|
clean:
|
||||||
|
rm waste
|
||||||
|
install: $(BINDIR)/waste
|
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Report wasted space.
|
||||||
|
#
|
||||||
|
# This basically prints a list of files and directories below a
|
||||||
|
# start point, where each entry is tagged with a "waste factor".
|
||||||
|
# The waste factor is a weighted sum of size, mtime and atime
|
||||||
|
# of the file.
|
||||||
|
#
|
||||||
|
|
||||||
|
sub wastefactor {
|
||||||
|
my ($size, $mtime, $atime) = @_;
|
||||||
|
|
||||||
|
return $size * $sf * ($mtime * $mf + $atime * $af);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub waste {
|
||||||
|
my ($dir) = @_;
|
||||||
|
my $i;
|
||||||
|
my @files;
|
||||||
|
my ($mtime, $atime, $size);
|
||||||
|
my ($tmtime, $tatime, $tsize) = (0, 0, 0);
|
||||||
|
|
||||||
|
if (!opendir(DIR, $dir)) {
|
||||||
|
printf "$0: cannot open directory $dir: $!\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@files = readdir(DIR);
|
||||||
|
closedir(DIR);
|
||||||
|
foreach $i (@files) {
|
||||||
|
if ($i eq "." || $i eq "..") { next }
|
||||||
|
|
||||||
|
$filename = $dir . "/" . $i;
|
||||||
|
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||||
|
$atime,$mtime,$ctime,$blksize,$blocks) =
|
||||||
|
stat($filename);
|
||||||
|
|
||||||
|
if (-d _) {
|
||||||
|
($size, $mtime, $atime) = waste($filename);
|
||||||
|
} else {
|
||||||
|
printf "%10.0f %d %d %d %s\n",
|
||||||
|
wastefactor(
|
||||||
|
$size, ($now - $mtime), ($now - $atime)),
|
||||||
|
$size, ($now - $mtime), ($now - $atime),
|
||||||
|
$filename;
|
||||||
|
}
|
||||||
|
$tsize += $size;
|
||||||
|
if ($mtime > $tmtime) {$tmtime = $mtime;}
|
||||||
|
if ($atime > $tatime) {$tatime = $atime;}
|
||||||
|
}
|
||||||
|
printf "%10.0f %d %d %d %s\n",
|
||||||
|
wastefactor(
|
||||||
|
$tsize, ($now - $tmtime), ($now - $tatime)),
|
||||||
|
$tsize, ($now - $tmtime), ($now - $tatime),
|
||||||
|
$dir;
|
||||||
|
return ($tsize, $tmtime, $tatime);
|
||||||
|
}
|
||||||
|
|
||||||
|
### --- main --- ###
|
||||||
|
$sf = 1.0/1000;
|
||||||
|
$mf = $af = 1.0/(3600*24*365.25);
|
||||||
|
|
||||||
|
if ($#ARGV != 0) {
|
||||||
|
print "Usage: $0 directoryname\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
|
||||||
|
waste($ARGV[0]);
|
||||||
|
exit(0);
|
Loading…
Reference in New Issue