Perl: Find files recursively
I needed to search recursively through a directory structure for files that matched a specific pattern. The simplest way that I found was using File::Find
. I wrote a simple wrapper function to make searching simpler and more straight-forward. It uses regular expression matching so it should be quite flexible.
use File::Find;
# All the files that end in .pl
my @perl_files = find_recurse(qr/\.pl$/, "/home/user/");
# Anything with kitten in the name
my @kittens = find_recurse(qr/kitten/, "/home/user/");
# All .mp3 and .ogg files
my @aud_files = find_recurse(qr/\.(mp3|ogg)$/, "/home/user/");
# Search two directories
my @cfg_files = find_recurse(qr/\.cfg$/, ("/tmp/", "/etc/"));
# Recursively search for files matching a pattern
sub find_recurse {
my ($pattern, @dirs) = @_;
if (!@dirs) {
@dirs = (".");
}
my @ret = ();
find(sub { if (/$pattern/) { push(@ret, $File::Find::name) } }, @dirs);
return @ret;
}