bonjour,
j'ai un problème...
j'arrive pas à faire un script qui supprime des fichiers suivant leurs extensions... les noms de fichier peuvent être différent...
voilà, si quelqu'un à une idée ?
![]()
bonjour,
j'ai un problème...
j'arrive pas à faire un script qui supprime des fichiers suivant leurs extensions... les noms de fichier peuvent être différent...
voilà, si quelqu'un à une idée ?
![]()
Bonjour,
le mieux est que tu nous montre ton script, on te dira si ça cloche quelque part![]()
Bin en fait j'ai fait ce script en batch et je voudrais le refaire en perl...![]()
ça c'est la première partie de mon problème...SET line=C:\Test_batch\test\
del %line%*.l*
del %line%*.page
del %line%*.BCS
del %line%*.db
del %line%*.dbb
del %line%*.esav
del %line%*.full
del %line%*.osav
del %line%*.PVTS
del %line%*.r*
del %line%*.s*
j'arrive pas à "traduire" ça en perl...
la 2ème partie de mon problème c'est que j'aimerai que ce script supprime les fichier dans tout les sous-dossier du dossier de travail...
je ne vois pas comment (ni en batch ni en perl) je peux lui dire : "fais ça dans tout les sous-dossier"...
Voili
T'as pensé à une fonction recursive?
Bon je te mache un peu le travail mais ca marche comme ca : la fonction debute son analyse sur un repertoire passé en argument
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 sub ParseDirectory { my $directory = shift if (-d $_[0]) or return 0; $directory = $directory."/" if ( $directory !~ /\/$/ ) ; opendir DIR, $directory or print "Impossible d'ourvrir le dossier $FILE\n", return 0; my @a_file = readdir DIR or return 0; @a_file = sort (@a_file); for (my $i=0; $i<scalar(@a_file); $i++){ my $tmp = $directory.$a_file[$i]; if ($tmp !~ /[\.~]$/) { if (-f $tmp) { &_ParseClasses($tmp); } elsif (-d $tmp) { &ParseDirectory($tmp); } } } close DIR; return 1; }
- si c'est un fichier elle execute une commande (ici _ParseClasses())
- si c'est un repertoire, la fonction se rappele elle meme.
PS: c'est une fonction d'un de mes programmes, donc ca va pas marcher directement pour le tient, c'est juste un exemple de fonction recursive ... surrement assez mal écrite mais bon, c'est le principe qui est important
ok, je vois ce que tu veux dire...
c'est une boucle, en fait??
Début du script
si c'est un fichier --> on supprime
si c'est un dossier ---> on relance le script
et ça s'arrête quand ??
![]()
je vais essayer de décortiquer ton script et d'en garder le principal...
Merci beaucoup pour ton aide !!!![]()
Ca s'arrete tout seul quand ca a parcouru l'ensemble de ton arborescence
Ce n'est pas une boucle, la récursion est différente de l'itération !!Envoyé par petibonohm
Sinon une solution légèrement différente :
Ce code fait usage du module File::Find (distribué avec Perl en standard) pour parcourir l'ensemble des fichiers du répertoire spécifié et de ses sous-répertoires et leur appliquer à chacun la fonction del_files_by_type avec le nom du fichier courant dans $_.
Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #!/usr/bin/perl use strict; use warnings; use File::Find; find( \&del_files_by_type, 'C:\Test_batch\test' ); sub del_files_by_type { if( not -d $_ and m/\.(?:l.*|page|BCS|dbb?|esav|full|osav|PVTS|r.*|s.*)$/ ){ unlink( $_ ); } }
--
Jedaï
Partager