Date: Thu, 20 Jan 2005 15:46:08 +0100 From: David Landgren <david@landgren.net> To: stable@freebsd.org Subject: Re: Very large directory Message-ID: <41EFC430.9010308@landgren.net> In-Reply-To: <20050120094551.GK79646@cirb503493.alcatel.com.au> References: <00b001c4fea0$7533d490$6745a8c0@MESE> <20050120094551.GK79646@cirb503493.alcatel.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
Peter Jeremy wrote: > 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41EFC430.9010308>