my $endTime=times();
printf "\n\ntake %.4f seconds of CPU.\n\n",$endTime-$beginTime;
--- end ------------------------------------------------------------
- deja, 0.01 secondes c'est pas vrai. le script tourne pendant plus
d'une minute.
- le test $path =~ /^\// (pour moi : commence par / ) ne marche pas.
- pourquoi des lignes sont encore écrites après la fin du script
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques Caron
Salut,
On Sun, 10 Jul 2005 17:37:11 +0200, kurtz le pirate wrote:
- deja, 0.01 secondes c'est pas vrai. le script tourne pendant plus d'une minute.
Tu mesures uniquement le temps CPU pris par le processus et ses enfants, alors que l'essentiel du temps est passé soit dans le noyau soit à attendre que les disques répondent. Si tu veux le temps "réel" regarde du côté de "time" ou "gettimeofday" (dans Time::HiRes pour ce dernier).
- le test $path =~ /^// (pour moi : commence par / ) ne marche pas.
Ben visiblement si, ça marche très bien, sinon tu n'aurais pas la liste...
- pourquoi des lignes sont encore écrites après la fin du script
Ce sont des messages renvoyés par find sur STDERR (donc non pris en charge par perl). Logiquement ils auraient du s'afficher avant, mais la synchro de STDOUT et STDERR peut quelquefois jouer des tours en fonction des bufferisations différentes.
Jacques.
Salut,
On Sun, 10 Jul 2005 17:37:11 +0200, kurtz le pirate
<kurtzlepirate@yahoo.fr> wrote:
- deja, 0.01 secondes c'est pas vrai. le script tourne pendant plus
d'une minute.
Tu mesures uniquement le temps CPU pris par le processus et ses enfants,
alors que l'essentiel du temps est passé soit dans le noyau soit à
attendre que les disques répondent. Si tu veux le temps "réel" regarde du
côté de "time" ou "gettimeofday" (dans Time::HiRes pour ce dernier).
- le test $path =~ /^// (pour moi : commence par / ) ne marche pas.
Ben visiblement si, ça marche très bien, sinon tu n'aurais pas la liste...
- pourquoi des lignes sont encore écrites après la fin du script
Ce sont des messages renvoyés par find sur STDERR (donc non pris en charge
par perl). Logiquement ils auraient du s'afficher avant, mais la synchro
de STDOUT et STDERR peut quelquefois jouer des tours en fonction des
bufferisations différentes.
On Sun, 10 Jul 2005 17:37:11 +0200, kurtz le pirate wrote:
- deja, 0.01 secondes c'est pas vrai. le script tourne pendant plus d'une minute.
Tu mesures uniquement le temps CPU pris par le processus et ses enfants, alors que l'essentiel du temps est passé soit dans le noyau soit à attendre que les disques répondent. Si tu veux le temps "réel" regarde du côté de "time" ou "gettimeofday" (dans Time::HiRes pour ce dernier).
- le test $path =~ /^// (pour moi : commence par / ) ne marche pas.
Ben visiblement si, ça marche très bien, sinon tu n'aurais pas la liste...
- pourquoi des lignes sont encore écrites après la fin du script
Ce sont des messages renvoyés par find sur STDERR (donc non pris en charge par perl). Logiquement ils auraient du s'afficher avant, mais la synchro de STDOUT et STDERR peut quelquefois jouer des tours en fonction des bufferisations différentes.
Jacques.
DoMinix
bonjour,
voila le petit script que je suis en train de faire :
--- begin -----------------------------------------------------------
my $command = "find / -name ".$target; my @result = `$command`; chomp(@result);
en plus des conseils de Jacques ... 1/ utilise directement my @result =`find / -type f -name $target 2>/dev/null` comme ça tu n'aura pas a tester si ce n'est pas un repertoire.
2/ utilise File::Find qui le fait directement en perl 2bis/ utilise find2perl pour convertir ta recherche find
-- dominix
bonjour,
voila le petit script que je suis en train de faire :
--- begin -----------------------------------------------------------
my $command = "find / -name ".$target;
my @result = `$command`;
chomp(@result);
en plus des conseils de Jacques ...
1/ utilise directement
my @result =`find / -type f -name $target 2>/dev/null`
comme ça tu n'aura pas a tester si ce n'est pas un repertoire.
2/ utilise File::Find qui le fait directement en perl
2bis/ utilise find2perl pour convertir ta recherche find
voila le petit script que je suis en train de faire :
--- begin -----------------------------------------------------------
my $command = "find / -name ".$target; my @result = `$command`; chomp(@result);
en plus des conseils de Jacques ... 1/ utilise directement my @result =`find / -type f -name $target 2>/dev/null` comme ça tu n'aura pas a tester si ce n'est pas un repertoire.
2/ utilise File::Find qui le fait directement en perl 2bis/ utilise find2perl pour convertir ta recherche find
-- dominix
kurtz le pirate
In article <42d17515$0$19998$, DoMinix wrote:
::> bonjour, ::> ::> voila le petit script que je suis en train de faire : ::> ::> --- begin ----------------------------------------------------------- :: ::> ::> my $command = "find / -name ".$target; ::> my @result = `$command`; ::> chomp(@result); :: ::en plus des conseils de Jacques ... ::1/ utilise directement ::my @result =`find / -type f -name $target 2>/dev/null` ::comme ça tu n'aura pas a tester si ce n'est pas un repertoire. :: ::2/ utilise File::Find qui le fait directement en perl ::2bis/ utilise find2perl pour convertir ta recherche find
super tes explications DoMinix! surtout le 2>/dev/null. je n'y avais pas pensé car les lignes : find: /.Trashes: Permission denied find: /private/etc/cups/certs: Permission denied qui remontaient, ben c'était des messages d'erreurs.
tout baigne maintenant... enfin presque car avec cette liste de dossier, je peux les effacer sauf ceux qui ne sont pas vides que je compte traiter avec un truc du style :
if (rmdir($path)) { print "n$path supprime"; } else { print "n$path not emptyn"; chdir($path); my $rm = `rm -r -f $path/*.*`; rmdir($path); }
encore merci a+
In article <42d17515$0$19998$636a15ce@news.free.fr>,
DoMinix <dominix@despammed.com> wrote:
::> bonjour,
::>
::> voila le petit script que je suis en train de faire :
::>
::> --- begin -----------------------------------------------------------
::
::>
::> my $command = "find / -name ".$target;
::> my @result = `$command`;
::> chomp(@result);
::
::en plus des conseils de Jacques ...
::1/ utilise directement
::my @result =`find / -type f -name $target 2>/dev/null`
::comme ça tu n'aura pas a tester si ce n'est pas un repertoire.
::
::2/ utilise File::Find qui le fait directement en perl
::2bis/ utilise find2perl pour convertir ta recherche find
super tes explications DoMinix! surtout le 2>/dev/null. je n'y avais
pas pensé car les lignes :
find: /.Trashes: Permission denied
find: /private/etc/cups/certs: Permission denied
qui remontaient, ben c'était des messages d'erreurs.
tout baigne maintenant... enfin presque car avec cette liste de dossier,
je peux les effacer sauf ceux qui ne sont pas vides que je compte
traiter avec un truc du style :
if (rmdir($path)) {
print "n$path supprime";
}
else {
print "n$path not emptyn";
chdir($path);
my $rm = `rm -r -f $path/*.*`;
rmdir($path);
}
::> bonjour, ::> ::> voila le petit script que je suis en train de faire : ::> ::> --- begin ----------------------------------------------------------- :: ::> ::> my $command = "find / -name ".$target; ::> my @result = `$command`; ::> chomp(@result); :: ::en plus des conseils de Jacques ... ::1/ utilise directement ::my @result =`find / -type f -name $target 2>/dev/null` ::comme ça tu n'aura pas a tester si ce n'est pas un repertoire. :: ::2/ utilise File::Find qui le fait directement en perl ::2bis/ utilise find2perl pour convertir ta recherche find
super tes explications DoMinix! surtout le 2>/dev/null. je n'y avais pas pensé car les lignes : find: /.Trashes: Permission denied find: /private/etc/cups/certs: Permission denied qui remontaient, ben c'était des messages d'erreurs.
tout baigne maintenant... enfin presque car avec cette liste de dossier, je peux les effacer sauf ceux qui ne sont pas vides que je compte traiter avec un truc du style :
if (rmdir($path)) { print "n$path supprime"; } else { print "n$path not emptyn"; chdir($path); my $rm = `rm -r -f $path/*.*`; rmdir($path); }
encore merci a+
damien guerin
A ce prix là tu peux directement faire : `rm -rf $path` et éviter ainsi ton test (à priori inutile)...
A ce prix là tu peux directement faire :
`rm -rf $path` et éviter ainsi ton test (à priori inutile)...