On Wed, 2005-Jan-19 21:30:53 -0600, Phillip Salzman wrote:
They've been running for a little while now - and recently we've noticed a lot of disk space disappearing. Shortly after that, a simple du into our /var/spool returned a not so nice error:
du: fts_read: Cannot allocate memory
No matter what command I run on that directory, I just don't seem to have enough available resources to show the files let alone delete them (echo *, ls, find, rm -rf, etc.)
I suspect you will need to write something that uses dirent(3) to scan the offending directory and delete (or whatever) the files one by one.
Skeleton code (in perl) would look like:
chdir $some_dir or die "Can't cd $some_dir: $!"; opendir(DIR, ".") or die "Can't opendir: $!"; while (my $file = readdir(DIR)) { next if ($file eq '.' || $file eq '..'); next if (&this_file_is_still_needed($file)); unlink $file or warn "Unable to delete $file: $!"; } closedir DIR;
similarly,
opendir(DIR, $some_dir ) or die "Can't open dir $some_dir: $!"; while ( defined(my $file = readdir(DIR))) { print "$file\n" unless ($file eq '.' || $file eq '..'); } closedir(DIR);
...will print the files one per line, which can be piped to more or redirected to another file. This will let you get a feel for the names of the files in the directory. It could then be cleaned up with various pipelines like egrep 'foo|bar|rat' | xargs rm
Note: you want to wrap the my $file = readdir(DIR) in a defined(), otherwise your loop will exit early if you come across a file named 0 (zero).
David
_______________________________________________ freebsd-stable@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "[EMAIL PROTECTED]"