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
et le resultat de celui ci :
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); }
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
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
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![]()
Partager