1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/usr/bin/perl
use strict;
use warnings;
use autodie;
use File::Basename;
use File::Find;
use File::stat;
$::PROGRAM = basename $0;
sub creation_date {
my $i = 0;
my @cdate = map {$_ + (0, 1, 1900)[$i++]} (localtime(stat(shift)->ctime))[3..5];
return sprintf("%04d.%02d.%02d", reverse @cdate);
}
sub process {
if (-f) {
my $file = $_;
# on ne traite pas un fichier de même nom que le script
return if (/^$::PROGRAM$/);
# on récupère la date de création au format adéquat
my $cdate = creation_date($file);
# on ne fait rien si le fichier est déjà dans le bon répertoire
return if (basename($File::Find::dir) eq $cdate);
# Arrêt si le répertoire ne peut être créé à cause d'un fichier de même nom
die "Erreur: le nom '$cdate' est déjà utilisé par un fichier!" if (-f $cdate);
# On crée le répertoire s'il n'existe pas
mkdir $cdate unless (-d $cdate);
# Arrêt si le fichier existe déjà dans le répertoire
die "Erreur: collision: '$file' existe déjà dans le dossier $cdate!" if (-f $cdate.'/'.$file);
# on effectue le déplacement du fichier dans le répertoire
rename $file, $cdate.'/'.$file;
}
}
find({ bydepth => 1, wanted => \&process, follow => 1 }, '.'); |
Partager