2010-07-21 4 views
0

J'ai une application web qui génère et télécharge des documents (word, pdf, etc.) sur le serveur. Maintenant, j'écris un script de shell d'alimentation qui va d'abord transférer ces fichiers dans un dossier ftp. Cette partie est terminée. Le deuxième script sera exécuté tous les jours sur mon serveur de sauvegarde et téléchargera tous les dossiers/fichiers de ce serveur ftp sur mon serveur de sauvegarde. Le problème est que je suis incapable de télécharger des dossiers. Il est facile de télécharger des fichiers, mais je n'arrive pas à trouver un morceau de code qui me permet essentiellement soit de télécharger le dossier complet (avec le contenu) ou au moins permettez-moi de parcourir le contenu du dossier. Si je connaissais les dossiers alors je n'aurais pas de problème, je pourrais simplement coder une fonction pour chaque dossier mais les documents sont téléchargés dans des dossiers dynamiques (les noms de dossiers sont générés par l'application). Je connais juste le dossier principal. J'ai besoin de l'itérer. Et zipper n'est pas une bonne idée car la taille du dossier est d'environ 1 Gig. Je ne veux pas transférer 1 concert à travers le fil tous les jours.Power Shell pour le téléchargement de dossiers via ftp

Toute aide à cet égard serait grandement appréciée.

Merci.

----------- -------- MISE A JOUR

Le GCI ne fonctionne que pour les fichiers sur un système local (je pourrais être mauvais sens ici). Je fais référence à l'itération à travers les dossiers et fichiers ftp.

Voici comment je suis localement: $ GciFiles = gci C: \ ParentFolder \ SubFolder \ -recurse | Où {$ _. -ne attributs "Répertoire"}

foreach (fichier $ en $ GciFiles) {}

Maintenant tout cela est dandy depuis le foreach peut me donner le nom du dossier ainsi que le nom de fichier bien. Cependant, je veux faire la même chose avec le code FTP:

$ ftphost = "ftplocation \ parentFolder \" références ici font un objet ftp_web_request

$ ftprequest.Method = [System.Net.WebRequestMethods + Ftp ] :: listDirectory $ ftpresponse = $ ftprequest.GetResponse() $ responseStream = $ ftpresponse.GetResponseStream() $ ReadStream = new-objet System.IO.StreamReader $ responseStream

while (($ ligne = $ ReadStream .ReadLine()) -ne $ null) { $ ligne ici nous donne le nom du fichier #function pour télécharger le fichier }

Maintenant, tout cela est bien pourvu que je SAIS LE RÉPERTOIRE JE VEUX télécharger les fichiers FROM.However comme je l'ai dit, je ne connaître le dossier parent qui a un nombre inconnu de dossiers (leurs noms sont GUID créés par une application) et dans chaque dossier GUID a quelques fichiers.

Maintenant, comment diable je suppose à GCI sur ce code ??? Ce que j'ai fait était sur le même code, d'abord obtenir le nom de chaque dossier, puis avoir une autre fonction (la même chose sauf maintenant je connais le nom du dossier) et sur ces fonctions Alors que la boucle télécharge les fichiers. Cependant, cela ne marche pas. Le script continue à s'exécuter. Je suis une eau profonde! Aucune idée de ce que diable faire!

+0

Je ne suis pas sûr de comprendre. Get-ChildItem devrait itérer à travers les dossiers ainsi que les fichiers. Pouvez-vous poster un extrait de code sur la façon dont vous accédez à votre site ftp? – tenpn

Répondre

0

tenpn l'a.Utilisez simplement l'option -Recurse pour Get-ChildItem

Oui, il semble que cette option ne vous offre pas vraiment les fonctionnalités que vous recherchez. Je soupçonne qu'il existe un moyen de contourner le problème en tirant le nom du répertoire côté serveur dans une chaîne et en créant ensuite un répertoire identique à la fin du client.

Mais pour être honnête, je pense que vous auriez sans doute de meilleurs en utilisant quelque chose comme le net-cmdlets

Je crois qu'il ya une licence amateur, ou si vous faites cela grâce au travail de la version complète est à moins de 100 dollars .

+0

comment puis-je -recurse sur un flux ftp ??? – xeshu

Questions connexes