Используя пару модулей CPAN это можно сделать простым. File::Copy
был основным модулем с Perl версии 5.0, но Date::Format
и Path::Class
потребуется установка, если у вас уже есть их.
Я принял ваше требование буквально, и это решение префикс исходного файла с датой создания с использованием %e%B%Y
в качестве формата, при этом верхний регистр переводится в нижний регистр и пробелы. Однако это не очень читаемый и листинг каталога не будет автоматически сортировать в хронологическом порядке, поэтому я рекомендую использовать %Y-%m-%d-
вместо заменив строку, содержащую призыв к strftime
с
my $date = lc strftime('%Y-%m-%d-', @date)
В настоящее время код просто выводит список файлов, которые он собирается переместить, и их назначения. Чтобы на самом деле сделать ход, вы должны раскомментировать звонок до move
.
use strict;
use warnings;
use Path::Class 'dir';
use Date::Format 'strftime';
use File::Copy 'move';
my $source = dir '/scripts/';
my $dest = dir '/log/';
for my $file (grep { not $_->is_dir } $source->children) {
my @date = localtime $file->stat->ctime;
(my $date = lc strftime('%e%B%Y', @date)) =~ tr/\x20//d;
my $newfile = $dest->file($date.$file->basename);
print "move $file -> $newfile\n";
# move $file, $newfile;
}
, когда вы задаете вопрос, вы должны опубликовать то, что вы пробовали до сих пор. – tuxuday