Bonjour a tous,

Je suis desolee de tres certainement reposer cette question mais ca fait deux jours que je bloque dessus et je n'ai trouve de reponse adequate nulle part.

Et d'ailleurs si Djibril parce par mon post et qu'a l'avenir mon script marche j'aimerais le soumettre parce que je ne l'ai trouve ni dans http://www.developpez.net/forums/d65...ponibles-perl/
non plus ici :
http://perl.developpez.com/sources/


Mon probleme est simple, j'aimerai lister tous les directory et subdirectory presents dans un site ftp.

J'etais partie sur ceci:http://cpansearch.perl.org/src/JDLEE...4/samples/rget

mais je me suis rendue compte qu'il y avait effectivement un listing de ceux ci MAIS avec une recuperation en local de l'ensemble de l'architecture et des fichiers provenant du ftp.

Donc j'ai abandonne cette piste.

J'ai ensuite trouve ce bout de script:
http://www.go4expert.com/forums/showthread.php?t=2348

Et donc voila j'ai cru trouver mon bonheur mais la recursivite ne se fait "pas bien".

Voici l'adresse ftp que je parse: ftp://ftp.ncbi.nlm.nih.gov/genbank/genomes/A_thaliana/

Voici mon code
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
# required modules
use Net::FTP;
use Net::FTP::File;
use Data::Dumper;
use File::Listing qw(parse_dir);
 
 
print("Connecting to FTP ... ");
# create a new instance of the FTP connection
$ftp = Net::FTP->new( "ftp.ncbi.nlm.nih.gov", Debug => 0 )
  or die("Cannot connect $!");
 
# login to the server
$ftp->login( "anonymous", "anonymous" ) or die("Login failed $!");
print(" Logged in ... \n");
@y = getRecursiveDirListing("/genbank/genomes/A_thaliana/");
print "the join \n";
print join( "\n", @y );
 
# close the FTP connection
$ftp->quit();
 
sub getRecursiveDirListing {
 
	# create an array to hold directories, it should be a local variable
	local @dirs = ();
 
	# directory parameter passed to the sub-routine
	my $dir = $_[0];
 
  # if the directory was passed onto the sub-routin, change the remote directory
	$ftp->cwd($dir) if ($dir);
 
 
	# get the file listing
	@ls = $ftp->ls('-lR');
 
	# the current working directory on the remote server
	my $cur_dir = $ftp->pwd();
	print "cur_dir: ",$cur_dir,"\n";
	# parse and loop through the directory listing
	foreach my $name (@ls) {
		my $isdir = $ftp->isdir($name);
		next if(!$isdir);
 
   		push( @dirs, "$cur_dir/$name" );    # push the directory into the array   	
   		# recursive call to get the entries in the entry, and get an array of return values	
   		@xx = getRecursiveDirListing("$cur_dir/$name");	
	}
	# merge the array returned from the recursive call with the current directory listing
 
	return (@dirs, @xx);
}
et le resultat de celui ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Connecting to FTP ...  Logged in ... 
cur_dir: /genbank/genomes/A_thaliana
cur_dir: /genbank/genomes/A_thaliana/OLD
cur_dir: /genbank/genomes/A_thaliana/OLD/CHR_I
the join 
/genbank/genomes/A_thaliana/OLD
/genbank/genomes/A_thaliana/OLD/CHR_I
Donc comme vous pouvez le voir la recursivite se fait bien du repertoire OLD vers CHR_I, et malheureusement le foreach est foireux lors du OLD (ou plutot je ne comprends pas pourquoi les autres repertoires dans le @ls ne sont pas parses) car il y a aussi les sous repertoires CHRII a V qui ne sont pas traites


Merci beaucoup d'avance pour votre aide precieuse (!!!),

Sinon j'ai essaye d'adapter un bout de code de Djibril sur le parsing de dossier mais je ne vous le mets par parce qu'il ne marche pas non plus