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