Bonjour, j'ai un script que j'avais récupéré qui me permettait de placer les fichiers d'un répertoire dans plusieurs sous-repertoires portant comme nom la date de création du fichier (2024.01.02 par exemple)
Depuis quelques temps il ne fonctionne plus ou plutôt il fonctionne mal : tous mes fichiers sont placés dans un répertoire ayant pour nom la date du jour.
Quelqu'un peut-il m'aider ?
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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