http://qs321.pair.com?node_id=778993
Description: We have a log directory full of files that we need to move out into different directories. I looked around for log file rotation utilities and found none. So I set out to write something. I first looked at various File::* modules but found none of them as easy as plain old File::Find. For usage at your site, customize the functions find_root_dir and categorize.
#!/usr/bin/perl

use strict;
use warnings;

use lib '../..' ;

use File::Copy;
use File::Find;
use File::Path;

my $root_dir = find_root_dir; 
our $prefix;


sub wanted {
    my ($file)=$_;

    return if -d $file;

    return if $File::Find::dir ne $root_dir;

    my $dir_to_make = categorize($file);

    File::Path::make_path($dir_to_make);

    File::Copy::move($file, $dir_to_make);

}

sub find_root_dir {

    use Local::Config;
    Local::Config->new->logdir;

}
 
sub categorize {
    my($file)=@_;

    substr($file, 0, 5);
}

File::Find::find(\&wanted, $root_dir);




# thanks to jhannah in #perl-help

# [09:52] <metaperl_work> Is there a utility to move files into a dire
+ctory based on a prefix of the name?
# [09:54] <mxf> "mv foo* bar/"?
# [09:54] <metaperl_work> mxf, yes, but there are tons of files which 
+must be automatically moved and directories created for them
# [09:55] <jhannah> trivial to write one?
# [09:55] <metaperl_work> jhannah, I suppose I need one of the File::F
+ind modules to do it
# [09:55] <metaperl_work> people seem to lieke F::F::Rules?
# [09:55] <mxf> metaperl_work, Ah, i see.
# [09:55] <jhannah> why? glob the dir in question, split your prefix, 
+create the dirs, move files
# [09:56] <jhannah> how is this more than 6 lines of perl?
# [09:56] <metaperl_work> for file in <*> { ... }
# [09:56] <metaperl_work> for my $file <*> { ... }
# [09:56] <metaperl_work> ?
# [09:56] <metaperl_work> next unless -f $file
# [09:56] <jhannah> foreach $file (glob "/path/to/dir") {  }
# [09:56] <jhannah> my $file