Changer me dirai vous ? Pour quoi faire?
Et bien pour incorporer la date de création
sous forme d'alphanumérique dans le nom du fichier, style:
note.log => note-RXTF4.log ou => note-090312.log ou => 090312-1630-note.log
Ça sert à les trier directement depuis une liste avec la date.
Et si vous décidez de renommer les fichiers .gif en -img2009.gif
pour transformer les fichiers:
348765.gif de votre appareil photo en 348765-img-mars-2009.gif
enfin ça peut être très pratique pour plein d'exemple.
En plus il modifie que ce que vous voulez et par ce que vous
désirez. Vous verrez que l'on peut faire énormément de choses et
en plus on peut s'en servir pour modifier plus encore.
Changer les extentions de tout les fichiers dans un dossier voulu
#==================== premiere version en couleur =================
#!perl -w
# remd: changer les extentions aux fichiers voulus.
alain Adelmar.
$x='x='x30;#
pour faire joli
print"Bonjour,
dans quel dossier voulez vous faire des modifications\n";
chomp($resp_dir=<STDIN>);
while(!-e"$resp_dir"){
print"affiner
votre séléction\n";
($rootdir,$reste)=split(/\\$/,$resp_dir);
$resp_dir="$rootdir";
openDIR,"$resp_dir"ordie"Ouverture
du repertoire $resp_dir impossible $!";
@lsdir=readdir(DIR);
closeDIRordie"Fermeture
impossible $!";
printSTDOUT@lsdir;
chomp($resp_dir=<STDIN>);
}
opendirDIR,"$resp_dir"ordie"Ouverture
du repertoire $resp_dir impossible $!";
foreach$file(sortreaddirDIR){
$file="$file\n";
print<STDOUT>,$file;
push@lsdir,$file;
}
# on aurai pu ecrire juste :
@lsdir = readdir(DIR);
closedirDIRordie"Fermeture
impossible $!";
#la PATH du rep est a ajouter au fichier
print"\n$x\nquelle
extentions voulez vous modifier:\n";
chomp($extini=<STDIN>);
while(!&correcte($extini)){
print"veuillez
entrer une extention correcte (3caracteres), expl: txt\n";
chomp($extini=<STDIN>);
}
print"par
quelle extention voulez vous la remplacer?\nnotez que vous aurez a valider
chaque chagement\n";
chomp($extvoulu=<STDIN>);
while(!&correcte($extvoulu)){
print"veuillez
entrer une extention correcte, expl: xxx\n";
chomp($extvoulu=<STDIN>);
}
# attention extention ne contient que 3 caract
et non pas ".xxx" (4)
@contenu=<F>;
foreach$file(@lsdir){
chomp$file;
$fl=$file;
#ajouter le path au filename
if($resp_dir=~/()\\$/){
$fl="$resp_dir"."$fl";
}
else{
$fl="$resp_dir"."\\$fl";
}
nextif($fileeq"\.\n"|"\.\.\n");
# selectionne les fichiers à modifier
if($file=~/()\.($extini)$/i){
($filename,$ext)=split(/\./,$file);
$fileout="$resp_dir"."\\$filename"."\."."$extvoulu";
print"modification
de $file en $fileout : \[O\/N\]\n";
$resp=<STDIN>;
chomp$resp;
if($resp=~/^o|YES|oui|ok/i){
rename$fl,$fileout;#
ou si on désire faire des copies d'abord (uncommante les lignes
ci-dessous)
#open F, "$fl" or die "Ouverture impossible du
fichier $fl $!";
#@contenu = <F>;
#close F or die "Saloperie de fermure de m. $!";
#open FO, ">$fileout" or die "Ouverture du fichier
cible $fileout $!";
#print FO @contenu;
#close FO || die "Putain de merde de con de vache
pourrie $!";
print"le
fichier $fl a ete modifie en $fileout\n";
}
elsif($resp=~/^n|NON|not|NO|neni|nada/){
print"Bon
on passe pour celui là\n";
next;
}
else{
print"c'est
pourtant pas compliqué de repondre par\noui ou non\tou\no ou n\tou\nYES
ou NO\n";
print"dans
le doute je m'abstient\n";
}
}
}
subcorrecte($ext){
my($ext)=@_;
if($ext=~/^\w{3,4}/){
return1;
}
else{
return0;
}
}
Voilà, comme le code perl est réutilisable,
il est possible en modifiant quelques lignes du script ci-dessous de faire
faire à peut prés n'importe quoi au fichiers d'un répertoire
voulu.
Ici donc un script qui vous permet de lister les fichiers d'un répertoire
en les triant par extentions.
Exemple vous avez un répertoire ou site avec la totalité
de vos documents dedans, avec ce script vous pouvez lister les fichier
.html d'un coté et les fichier .gif et .bmp
dans un autre.
autre exemple: vous voulez avoir une copie de tout les .dll du dossier
System de Windows pour l'envoyer à un copain afin qu'il compare
avec son dossier.
#!perl
# remd: liste tout le contenu des repertoires
désiré dans un fichier rep.dat
# ou seulement les fichiers ayant l'extention
ou les extentions désirés. Pratique
# === a_l_a_i_n
-//- a_d_e_l_m_a_r === aadelmar@wanadoo.fr
# Pour Windows 95, 98, 2000 et le prochain
surrement.
$i = 0;
print "Indiquez le dossier a traiter:\n";
chomp ($d = <STDIN>);
if ($d !~ /\\$/) {
$d = $d . "\\";
}
opendir R, "$d" or die "Ouverture repertoire impossible $!";
foreach $file (sort readdir R) {
$file = "$file\n";
print <STDOUT>, $file;
push @f_du_rep, $file;
}
closedir R or die "Fermeture du repertoire impossible $!";
sort @f_du_rep;
#si vous désirez faire qq aux fichier du répértoire
c'est là
print "voulez vous une liste par extention[s] (entrez l'extention
ex: .html,.txt)ou\ncontinuer pour le contenu du répertoire [Enter]\n";
chomp ($resp = <STDIN>);
if ($resp eq "") {
$fout = "$d" . "rep.dat";
open F, ">$fout" or die "Ouverture du fichier rep impossible
$!";
print F @f_du_rep;
$d = "\nFait le : " . localtime(time) . "\n";
print F $d;
close F or die "Fermeture impossible bordel $!";
print "Le contenu du répertoire à était
copier dans $fout\nTchao! bonne journée\n";
}
else {
#on place la liste des extentions dans une variable liste,
car on n'en connais pas le nombre.
@ext =split(/,/, $resp);
print "$ext[0]\n";
print "$ext[1]\n";
for ($ext[0] .. $#ext) {
foreach $file(@f_du_rep) {
if ($file =~ /($ext[$i])$/) {
push @extn, $file;
}
}
$i++;
}
$fout = "$d" . "rep_by_" . "$ext[0]" . '.dat';
open FE, ">$fout" or die "Ouverture de $fout impossible $!";
print FE @extn;
close FE or die "fermeture de $fout impossible $!";
}