Спасибо всем, скрипт написан. Может быть будет кому-то полезен. Назначение - сортировка кучи файлов по дате создания в дерево папок вида Год/Месяц/День. В этом виде в скрипт передаются 2 параметра: папка - источник файлов, и папка, в которой будет создаваться дерево папок.#!/usr/local/bin/perl
# Фотографии в папке. Раскладвыаем их по дереву папок в соответствии с годом и месяцем создания. Если папка, соотвтетсвующая году или месяцу отстутствует, создаем ее.
use strict;
use File::Copy;
use File::Path;
use Time::Local;
# Проверяем, заданы ли необходимые аргументы
unless (defined $ARGV[0] || defined $ARGV[1])
{
print ("При вызове скрипта необходимо указать аргументы: папка-источник, папка-корень дерева\n");
die;
}
# берем имя папки, если задано аргументом командной строки
my $sourcedir = $ARGV[0];
my $photodir = $ARGV[1];
my $size;
my @files;
my $firstfile;
my $ctime;
my @time;
my $year;
my $month;
my $day;
my $filetime;
sortphoto($sourcedir, $photodir);
sub sortphoto
{
do
{
# Получем все файлв в папке. Берем первый файл, определяем для него year, month, day
@files = glob ("$sourcedir/*.*");
$firstfile = $files[0];
$ctime = (stat "$firstfile")[10];
@time = localtime($ctime);
$year = 1900 + $time[5];
$month = 1+ $time[4];
$day = $time[3];
# Создаем папку, соответствующую дате (если еще не создана)
mkpath("$photodir/$year/$month/$day");
# Ищем файлы, дата которых совпадает с датой создания первого файла
foreach (@files)
{
$filetime = (stat $_)[10];
if ( $filetime == $ctime)
{
# Переносим файл в папку, соответствующую дате
move("$_", "$photodir/$year/$month/$day") or die "The move operation failed: $!";
}
}
# Пока в папке sourcedir есть файлы, продолжаем
# Определяем количество элементов в массиве файлов (берем индекс последнего элемента плюс 1)
$size = $#files + 1;
} while ($size > 0);
}
Если кто-то найдет ошибки, с удовольствием исправлю. Также жду любых замечаний, недавно изучаю язык, но хотелось бы совершенствоваться.