On Wed, Apr 23, 2008 at 11:58 PM, Siegfried Heintze (Aditi)
<a-siehei@[EMAIL PROTECTED]
> wrote:
> I have directory names in the format of "yyyy-mm-dd_hh-mm-ss". Sometimes
I want to delete all the non-empty directories that are from last week or
earlier. Other times I want to delete all the directories that are over a
week old.
>
> Is there a script out there already that does this?
>
> Assuming the answer is no, I started writing a script. Unfortunately,
the following does not produce an error and does not work.
>
> $ perl -MFile::Tasks -e
'(File::Tasks->new)->remove_dir("2008-03-11_15-42-58/");
>
> So how would you enumerate the directories, find the ones that are old
(according to the above criteria) and delete them and their contents? What
packages would you use?
snip
Well, the glob* function combined with the grep** and -d*** functions
get you part way there and the rmtree function from File::Path****
does the rest:
#iterate over all directories that are not empty
for my $dir (grep { -d and <$dir/*> } <*>) {
#skip any directories that don't match our pattern
next unless my $date = $dir =~
/^([0-9]{4}-[0-9]{2}-[0-9]{2})_[0-9]{2}-[0-9]{2}-[0-9]{2}$/;
#blow away directory if it is older than the target date
rmtree [$dir], 0, 0 if $date lt $target_date;
}
* http://perldoc.perl.org/functions/glob.html
** http://perldoc.perl.org/functions/grep.html
*** http://perldoc.perl.org/functions/-X.html
**** http://perldoc.perl.org/File/Path.html
--
Chas. Owens
wonkden.net
The most im****tant skill a programmer can have is the ability to read.


|