Bonjour, j'ai pas mal de fichiers mp3 qui portent des noms divers (voir capture d'écran) et j'aimerais bien avoir un script perl qui renomme chaque fichier par le nom de l'abum, un tiret puis le titre et qui crée un dossier par album en mettant dedans tous les fichiers de cet album.
J'ai déjà un script pour renommer mes photos par date de création et qui les place chacune dans le dossier relatif à la date.
Cela me fait une base pour démarrer. Je précise que je ne sais pas coder en perl, j'ai simplement des bases en javascript.
Est ce que quelqu'un pourrait me donner des pistes pour que je puisse démarrer? Merci
Mon script pour mes photos :
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