2009-11-19 4 views
0

J'ai deux serveurs Unix dans lesquels j'ai besoin de ftp certains fichiers. La structure du répertoire est presque identique sauf une légère différence, comme:Comment puis-je ftp plusieurs fichiers?

server a     server b 
miabc/v11_0/a/b/c/*.c miabc/v75_0/a/b/c/ 
miabc/v11_0/xy/*.h  miabc/v11_0/xy/ 

Il existe de nombreux modules:

miabc 
mfabc 

La structure du répertoire en eux est le même dans les deux serveurs, à l'exception du 11_0 et 75_0. La structure du répertoire dans les différents modules est différente

Comment puis-je FTP tous les fichiers de tous les modules dans le module correspondant dans le deuxième serveur b par l'un des langages de script comme awk, Perl, shell, ksh en utilisant FTP?

Répondre

1

Je dirais que si vous voulez aller avec Perl, vous devez utiliser Net :: FTP.

Une fois, je besoin d'un script qui diffs une structure des répertoires/fichiers sur un serveur FTP avec une structure répertoire/fichier correspondant sur un disque dur local, qui me conduisent à écrire this script. Je ne sais pas si c'est efficace ou élégant, mais vous pourriez trouver l'une ou l'autre idée en elle.

HTH/René

-2

Je suggère que vous pouvez ouvrir une session sur un serveur du premier et aller sur le chemin appropraite miabc/v75_0/a/b/c /. De là, vous devez faire un sftp à l'autre serveur.

  1. utilisateur sftp @ servername
  2. Aller au chemin appropraiate quels fichiers doivent être transférées.
  3. écrire la commande mget *
+0

@sachin ... je sais comment faire ftp mais le problème est qu'il y a des milliers de fichiers dans plusieurs répertoires. C'est donc une tâche très difficile d'aller dans tous les répertoires et de faire mget. – Vijay

+0

Je ne connais pas la raison de downvoting moi. Content de le savoir. Mais si vous avez une liste de chemins absolus de tous les répertoires, alors cette approche fonctionnera à l'intérieur d'une boucle for itère sur le compte ls –

-1

j'utiliser une combinaison de Expect, lftp et une fonction récursive pour marcher la structure du répertoire.

-1

Si le système de fichiers prend en charge la création de lien ou la liaison directe, j'utiliserais un simple wget pour refléter le serveur ftp. dans l'un d'eux quand vous wgetting juste pirater le répertoire v11_0 pour pointer vers 75_0, wget ne saura pas la différence.

serveur

a:

  1. aller à/projet/Servera
  2. wget la chose entière.(Ce qui devrait les placer tous dans/projet/Servera/miabc/v11_0)

serveur b:

  1. aller à/projet/serverb
  2. créer un répertoire/projet/serverb/miabc/75_0, lien à/projet/Servera/v11_0:
    • ln -s /project/serverb/miabc/75_0 /project/servera/v11_0
  3. wget serverb, cela b e suivi lorsque wget tente de CWD en en 75_0 il se trouvera dans/projet/Servera/v11_0

Ne pas rendre le projet plus difficile qu'il doit être: lire les docs sur wget, et ln. Si wget ne suit pas les liens symboliques, produisez un rapport de bogue et utilisez un lien physique si votre FS le supporte.

0

Il semble que vous vouliez vraiment rsync à la place. J'essaierais d'éviter toute programmation pour résoudre ce problème.

+0

Rysnc ne résout pas fondamentalement le problème de la fusion des structures/different/directory. C'est juste un transport massivement plus efficace. –

+1

Il ne s'agit pas d'une structure de répertoire différente selon la question. Ils ont juste un répertoire de base différent. J'utilise rsync dans cette situation tout le temps. –

0

Voir que vous devez utiliser le chemin d'accès correct du répertoire dans lequel vous souhaitez envoyer des fichiers. Vous pouvez créer un petit script avec PHP. Php fournit de bonnes fonctions ftp.using php vous pouvez facilement ftp votre fichier. mais avant cela, une fois vérifier vos paramètres FTP du serveur IIS ou fichier zilla J'ai utilisé le code ci-dessous pour envoyer des fichiers sur le FTP est en php: -

$conn_id = ftp_connect($FTP_HOST) or die("Couldn't connect to ".$FTP_HOST); 
    $login_result =ftp_login($conn_id, $FTP_USER, $FTP_PW); 
    ftp_fput($conn_id, $from, $files, $mode) // ths is the function to put files on ftp 

Ce code est juste pour référence, passer par manuel php avant de l'utiliser.

Questions connexes