On Wed, Apr 23, 2008 at 11:58 PM, Siegfried Heintze (Aditi)
<[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 important skill a programmer can have is the ability to read.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/