perl - lister les fichiers d'un rep - Perl - Programmation
Marsh Posté le 11-07-2011 à 21:56:27
Sur mon PC, ceci:
C:\Perl>find2perl /home/belette//?/?/ -type f -name "*.log" -exec /usr/bin/stat -c "%s %n" {} \; |
génère ce script:
Code :
|
A toi de voir ce que la commande génère dans ton environnement linux ou unix, puis à toi d'optimiser, comme je l'avais fait dans cet exemple ci: http://forum.hardware.fr/hfr/Progr [...] m#t1940849
A+,
Marsh Posté le 11-07-2011 à 22:07:15
Pas sur que ton path initial avec des ? marche dans File::Find::find({wanted => \&wanted}, '/home/belette//?/?/'); d'ailleurs.
Il faudra peut être d'abord établir la liste des répertoires qui matchent ce pattern.
le // après belette, c'est volontaire (avec quel sens alors) ou bien c'est une faute de frappe pour un seul /
A+,
Marsh Posté le 11-07-2011 à 22:17:04
Hello,
merci pour vos infos.
Sinon, oui, le ?, c'est fait expres, car j'ai des sous repertoires A, B, C, D, E, F, G et H ( et la meme chose en sous-sous rep), ya du postfix qui tourne dessus.
sinon, oui, le //, c'est une faute de frappe
Marsh Posté le 12-07-2011 à 12:04:24
Bon, en regardant d'un peu plus près ce qu'il y a à simplifier, ceci devrait coller, si j'ai bien pigé ce que tu veux faire.
Code :
|
(le but étant d'éviter de faire system @command; à de nombreuses reprises, comme dans le script généré par find2perl, ce qui ralentit l’exécution, quand il y a des commandes built-in perl qui peuvent le faire)
PS: Ma solution précédente supposait que tous tes fichiers étaient dans des sous répertoires à deux niveaux en dessous de /home/belette et pas plus bas.
Mais si on a aussi des sous répertoires plus bas, il faut alors modifier le code:
Code :
|
A+,
Marsh Posté le 12-07-2011 à 14:24:25
Tiens au fait, tu peux éventuellement rajouter ceci à la fin du code:
print "Warning: unexpected ending level: $level\n" if ($level != -1);
Pour avertir, si on est pas revenu au niveau de départ à la fin du traitement, qu'il doit y avoir un problème.
A+,
Marsh Posté le 11-07-2011 à 19:12:34
Hello !
J'aurais besoin de l'équivalent de la commande suivante en perl :
car le problème, c'est que c'est lent car il y a environ 1 000 000 de fichiers.
On m'a dit que parser les sous rep en perl était beaucoup plus rapide mais je n'en ai jamais fait
Est ce que vous auriez qqch sous la main ?.
Merci
---------------