[Perl] Fichier dans un dossier ou sous-dossier

Fichier dans un dossier ou sous-dossier [Perl] - Perl - Programmation

Marsh Posté le 08-04-2004 à 14:37:42    

Voila, j'ai un fichier dont le path absolue est /web/htdocs/test.html et il pourrait aussi bien se trouver dans /web/htdocs/test/test.html
 
J'aimerais vérifier s'il est retrouve sous /web/htdocs (peut terminer ou non par un /)
 
je me demandais si yavais pas déjà un truc, du genre un module File::??? qui pouvait faire ca
 
je squat cpan depuis un bon 30min sans rien trouver alors je songe le faire manuellement avec un regular expression en ajoutant au path un / s'il ne termine pas par celui ci
 
 
merci

Reply

Marsh Posté le 08-04-2004 à 14:37:42   

Reply

Marsh Posté le 08-04-2004 à 14:41:20    

hum jcrois que File::Find::Rule peut p-e le faire
 
je confirme dans quelques minutes

Reply

Marsh Posté le 08-04-2004 à 15:08:13    

je suis pas certain d'avoir saisi ton probleme, mais pour tester si un fichier existe ou est present à un endroit donné tu fais comme ca:
 
if (-e $file) {
  ok
}


Message édité par pospos le 08-04-2004 à 15:08:35
Reply

Marsh Posté le 08-04-2004 à 15:34:26    

ouais, mais je voulais savoir si par exemple, /web/htdocs/test.html était sous /web/htdocs
 
meme chose pour /web/htdocs/test/test.html
 
ca fonctionne ainsi
 
if (File::Find::Rule->file->name("index.html" )->in("/web/htdocs" )) { ... }
 
mais là faut jle fasse marcher avec des paths absolue pour les fichiers

Reply

Marsh Posté le 08-04-2004 à 15:36:39    

pourkoi tu test pas avec une expression reguliere?

Reply

Marsh Posté le 08-04-2004 à 15:50:32    

à moins qu'il cherche a savoir si un fichier se trouve dans un dossier, sous-dossiers inclus, sans connaître le chemin d'accès (juste le nom du fichier) ?

Reply

Marsh Posté le 08-04-2004 à 16:23:08    

pospos a écrit :

pourkoi tu test pas avec une expression reguliere?


 
parce que je peux avoir
 
mon path: /web/htdocs   ou   /web/htdocs/
mon fichier: /web/htdocs/index.html   ou  /web/htdocs/monsite/index.html
 
mais que je pourrais avoier un dossier /web/htdocstoto/monsite/index.html que je veux pas prendre en compte

Reply

Marsh Posté le 08-04-2004 à 16:30:23    

et /^\/web\/htdocs(\/.*)?$/ ne pourrait pas suffire alors ?


Message édité par Tentacle le 08-04-2004 à 16:32:21
Reply

Marsh Posté le 08-04-2004 à 16:37:05    

et dans le cas que /web/htdocs est plutot égal à /web/htdocs/
 
ca fonctionne toujours?

Reply

Marsh Posté le 08-04-2004 à 16:42:21    

le .* peut aussi ne rien prendre normalement ... donc oui, enfin essaie toujours :)

Reply

Marsh Posté le 08-04-2004 à 16:42:21   

Reply

Marsh Posté le 08-04-2004 à 16:46:10    

Code :
  1. use strict;
  2. use File::Find;
  3. my $DocumentRoot = "/web/htdocs/";
  4. find(\&test, "/web" );
  5. sub test {
  6.   if ($File::Find::name =~ m/^$DocumentRoot(\/.*)?$/) {
  7.     print $File::Find::name . "\n";
  8.   }
  9. }


 
fonctionne quand $DocumentRoot = "/web/htdocs" mais pas avec le "/" à la fin
 
et faut pas que ca print les fichiers se trouver dans un /web/htdocs2 par exemple

Reply

Marsh Posté le 08-04-2004 à 17:16:04    

ca sa semble fonctionner pour les 2 valeurs possibles de DocumentRoot
 

Code :
  1. use strict;
  2. use File::Find;
  3. my $DocumentRoot = "/web/htdocs";
  4. #my $DocumentRoot = "/web/htdocs/";
  5. find(\&test, "/web/" );
  6. sub test {
  7.   if ($File::Find::name =~ m/^$DocumentRoot\/?/ || $DocumentRoot =~ m/^$File::Find::name\/?$/) {
  8.     print $File::Find::name . "\n";
  9.   }
  10. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed