Change Extentions

alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

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.


sommaire » programmation » linux + perl » exemple

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 $!";
 
 }
 
 
 

retour