如何通过ftp传输多个文件?

如何通过ftp传输多个文件?,ftp,Ftp,我有两台unix服务器,需要在其中ftp一些文件。 目录结构几乎相同,只是略有不同,如: 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/ 有许多模块: miabc mfabc 除了11_0和75_0之外,它们内部的目录结构在这两个服务器中都是相同的。而不同模块中的目录结构是不同的 如何使用FTP通过awk

我有两台unix服务器,需要在其中ftp一些文件。 目录结构几乎相同,只是略有不同,如:

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/
有许多模块:

miabc
mfabc
除了11_0和75_0之外,它们内部的目录结构在这两个服务器中都是相同的。而不同模块中的目录结构是不同的


如何使用FTP通过awk、Perl、shell、ksh等脚本语言将所有模块中的所有文件FTP到第二台服务器b中的相应模块中?

我想说,如果要使用Perl,必须使用Net::FTP

有一次,我需要一个脚本来区分FTP上的目录/文件结构 本地硬盘上具有相应目录/文件结构的服务器, 这让我开始写作。我不知道它是高效的还是优雅的,但你可能会发现其中之一 这里面有一个想法


hth/Rene

我建议您可以先登录任何一台服务器,然后转到适当的路径miabc/v75_0/a/b/c/。从这里开始,您需要对另一台服务器执行sftp

  • sftpuser@servername
  • 转到需要传输文件的适当路径
  • 编写命令mget*

  • 我将使用、和递归函数的组合来遍历目录结构。

    如果文件系统支持符号链接或硬链接,我将使用简单的
    wget
    来镜像ftp服务器。在其中一种情况下,当您在设置时,只需将目录
    v11\u 0
    指向
    75\u 0
    ,wget就不会知道其中的区别

    服务器a:

  • 转到/project/servera
  • 把整件事都搞定。(这应该将它们全部放在/project/servera/miabc/v11\u 0中)
  • 服务器b:

  • 转到/project/serverb
  • 创建目录/project/serverb/miabc/75\u 0,将其链接到/project/servera/v11\u 0:
    • ln-s/project/serverb/miabc/75_0/project/servera/v11_0
  • wget服务器B,当wget试图在75_0中cwd时,它会发现自己在/project/servera/v11_0中

  • 不要让项目变得比需要的更难:阅读wget上的文档和ln。如果wget不遵循符号链接,请提交错误报告,如果您的FS支持,请使用硬链接。

    听起来您确实需要rsync。在解决这个问题时,我会尽量避免任何编程。

    请参阅您需要使用要发送文件的目录的正确路径。 您可以使用php创建小脚本。 php提供了很好的ftp功能。使用php,您可以轻松地ftp文件。但在此之前,请检查IIS服务器或文件zilla的ftp设置 我使用以下代码在ftp上发送文件,这是在php中:-


    这段代码仅供参考,在使用之前请先阅读php手册。

    @sachin…我知道如何使用ftp,但问题是在多个目录中有1000个文件。因此,访问每个目录并执行mget是一项非常困难的任务。我不知道投票否决我的原因。很高兴知道。但是,如果您有一个所有目录的绝对路径列表,那么这种方法将在ls countRysnc上的for循环中工作。snc并不能从根本上解决合并/不同/目录结构的问题。它只是一种更高效的传输方式,根据问题的不同,它不是一种不同的目录结构。它们只是有一个不同的基本目录。在这种情况下,我一直使用rsync。
    $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