Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi all, I need to go through a file tree and delete al files ending .results.
use File::Find; my @directories = ( "/home/"); find ($File::Find::name if /\.results$/ , @directories );
how can i delete the file when found? Thanks

Replies are listed 'Best First'.
Re: File::find question
by Crian (Curate) on Feb 03, 2005 at 15:27 UTC

    Just unlink them like this:

    find (sub { unlink($File::Find::name) if /\.results$/} , @directories );
      thanks for that
Re: File::find question
by stajich (Chaplain) on Feb 03, 2005 at 15:29 UTC
    You should probably use the wanted option.
    sub wanted { unlink $File::Find::name if $File::Find::name =~ /\.resul +ts$/ } find(\&wanted, @directories);
Re: File::find question
by amw1 (Friar) on Feb 03, 2005 at 17:50 UTC
    I find that find2perl is often useful for stuff like this:
    % find2perl /home -name "*.result" -exec rm {} \; #! /usr/bin/perl -w eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; #$running_under_some_shell use strict; use File::Find (); # Set the variable $File::Find::dont_use_nlink if you're using AFS, # since AFS cheats. # for the convenience of &wanted calls, including -eval statements: use vars qw/*name *dir *prune/; *name = *File::Find::name; *dir = *File::Find::dir; *prune = *File::Find::prune; sub wanted; # Traverse desired filesystems File::Find::find({wanted => \&wanted}, '/home'); exit; sub wanted { /^.*\.result\z/s && (unlink($_) || warn "$name: $!\n"); }