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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
#!/usr/bin/perl
# Shebang perl
# use warnings = vérification de la syntaxe
# use strict = obligation de déclarer les variables
# use Carp = alternative à warn & die pour les modules (utilisation de croak)
# use File::Find est un module Perl qui permet de parcourir récursivement tous les fichiers et d'appliquer des traitements dessus
# use diagnostics permet d'avoir des informations supplémentaires et plus précises sur les erreurs de compilation
use warnings;
use strict;
use Carp;
use File::Find;
use diagnostics;
#Exécution du programme
###### NOTE POUR PLUS TARD : Envoyer le répertoire en paramètre au script
my $repertoire_a_controler = '/home/NMalo/Temp';
main($repertoire_a_controler);
# Fonction principale
# La fonction principale appelle toutes les fonctions une par une
sub main
{
my ($repertoire) = @_;
my @blackList = ();
my @fichiers = ();
# Recherche des fichiers et récupération sous forme de tableau
# Entrée = Rien
# Sortie = Tableau @fichiers avec les chemins et noms de chaque fichier
my @fichiersAControler = recherche($repertoire);
# Récupération des fichiers vides
# grep -z = Recherche des fichiers existants mais vides
# Entrée = @fichiersAControler
# Sortie = @tempList
my @tempList = grep { -z $_ } @fichiersAControler;
# copie de @tempList dans @blackList
# Entrée = @blackList vide et @tempList = fichiers vides
# Sortie = @blackList(fichiers vides) & @tempList réinitialisé
copyBlackList( \@blackList, \@tempList );
@tempList = ();
#Second test, on vérifie les fichiers non conformes
# Entrée = $ref_fichiers
# Sortie = @tempList en tableau des fichiers non conformes aux conventions de nommage @fichiers_inconformes
@tempList = testInconforme( \@fichiersAControler );
# copie de @tempList dans @blackList
# Entrée = @blacklist vide & @tempList = @fichiers_inconformes
# Sortie = @blacklist(fichiers vides + fichiers inconformes) & @tempList réinitialisé
copyBlackList( \@blackList, \@tempList );
@tempList = ();
# On supprime les doublons de la liste des fichiers de la blacklist
# Entrée = Tableau @blackList
# Sortie = Feedback
@blackList = supprime_doublon( \@blackList );
# On supprime les fichiers blackistés et on écrit le reporting dans un fichier
execBlackList(@blackList);
return;
}
####################################### [RECHERCHE] #####################################################
# Fonction de récupération de la liste des fichiers
sub recherche
{
my ($repertoire) = @_;
my @fichiers = ();
# Si le répertoire n'existe pas, feedback
if ( !-e $repertoire )
{
croak "Répertoire inexistant : $repertoire\n";
}
# Récupération des fichiers (-f = si le fichier existe)
find
(
sub
{
if ( -f $File::Find::name ) { push @fichiers, $File::Find::name; }
},
$repertoire
);
return @fichiers;
}
####################################### [TESTS] ########################################################
# Fonction de suppression des fichiers inconformes
sub testInconforme
{
my $ref_fichiers = shift;
my @fichiers_inconformes = ();
# Regex
foreach my $fichier ( @{$ref_fichiers} )
{
if
(
#m indique que l'on veut faire un match
#choix du séparateur /, m n'est pas obligatoire pour faire des matchs, mais gardé par sécurité suivant les versions & modules de Perl
# Si le fichier se termine par cette extension, il est inconforme et est envoyé dans la liste @fichiers_inconformes
( $fichier =~ m/\.(\w*_\w*|3ds|ace|aif|aiff|aifc|ani|avi|bak|bmp|c|cda|cdf|cdr|cgi|cgm|chk|com|cpe|cpl|cue|cur|dvit|dib|
divx|diz|drw|dwg|dxf|ecd|eps|eqn|exe|fif|flc|fli|fon|for|fot|grp|hlp|icc|ico|icm|idf|iff|iges|
ilbm|lha|lbm|m|m3u|max|mid|mkv|mod|mov|mp2|mp3|mpg|n64|ocx|p|pcd|pct|pcx|pdf|pic|pif|pls|prj|
psp|pub|pwl|qt|ra|ram|reg|scr|snd|swf|tga|theme|tif|tiff|tmp|torrent|ttf|uu|uue|vbs|vivo|voc|
vtc|vue|wav|wiz|wmf|wmv|wpg|wri|xi|xls|xm)$/ )
# Si le fichier commence par une minuscule ou un chiffre, il est inconforme et est envoyé dans la liste @fichiers_inconformes
|| ( $fichier =~ m/^[a-z|0-9]/ )
# Si le fichier contient des espaces, des accents ou des symbôles inappropriés, il est inconforme et est envoyé dans la liste @fichiers_inconformes
|| ( $fichier =~ m/['\sÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØþÙÚÛÜÝàáâãäåæçèéêëìíîïðñòóôõöøÞùúûüýÿ¢ß¥£©®ª×÷±²³¼½¾µ¿¶·¸º°¯§
¤¦¬¨]/ )
)
{
push @fichiers_inconformes, $fichier;
}
return @fichiers_inconformes;
}
}
# Fonction de suppression des doublons
sub supprime_doublon
{
my ($ref_tabeau) = @_;
return keys %{ { map { $_ => 1 } @{$ref_tabeau} } };
}
# Fonction de création BlackList
# Entrée = @blackList
# Sortie = Feedback des fichiers à supprimer
sub execBlackList
{
my @fichiers = @_;
print "Les fichiers supprimés sont les suivants :\n";
foreach my $fichier (@fichiers)
{
unlink($fichier);
print "- $fichier\n";
}
}
# ----
# PUSH POUR COPYBLACKLIST
# ----
# Fonction de copie de fichiers dans la BlackList
# Entrée = @tempList
# Sortie = @blackListcopyBlackList
sub copyBlackList
{
my ( $ref_blacklist, $ref_liste ) = @_;
foreach my $fichier ( @{$ref_liste} )
{
push @{$ref_blacklist}, $fichier;
}
return;
} |
Partager