simple/cleandir/cleandir

65 lines
1.2 KiB
Perl
Executable File

#!/usr/bin/perl -w
use strict;
use File::stat;
my $verbose = 0;
sub usage {
print STDERR "Usage: $0 [-d days] dir ...\n";
exit(1);
}
sub cleandir {
my ($dir, $since) = (@_);
my $notremoved = 0;
if ($verbose) {
print STDERR "$0: cleandir $dir $since {\n";
}
if (!opendir(DIR, $dir)) {
printf STDERR "$0: cannot opendir $dir: $!";
return;
}
for my $i (readdir(DIR)) {
if ($i eq "." || $i eq "..") {next}
if ($verbose) {
print STDERR "$0: checking $dir/$i\n";
}
my $st = lstat("$dir/$i");
if ($verbose) {
print STDERR "$0: mtime=", $st->mtime, " atime=", $st->atime, "\n";
}
if (-d _) {
if (cleandir("$dir/$i", $since) == 0 && $st->mtime < $since) {
if (rmdir("$dir/$i")) {next}
}
} elsif ($st->mtime < $since && $st->atime < $since) {
if (unlink("$dir/$i")) {next}
}
$notremoved++;
}
if ($verbose) {
print STDERR "$0: cleandir: $notremoved }\n";
}
return $notremoved;
}
sub main {
my $since = time() - 14 * 86400;;
my $i;
while ($i = shift(@ARGV)) {
if ($i eq "-d") {
my $days = shift(@ARGV);
$since = time() - $days * 86400;
} elsif ($i eq "-v") {
$verbose++;
} else {
cleandir($i, $since);
}
}
exit(0);
}
main();