2009-11-19 30 views
0

我有,我必須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,Perl,shell,ksh等任何腳本語言將所有模塊中的所有文件都FTP到第二個服務器b中的相應模塊中?

回答

1

,如果你想要去用Perl我說,你必須使用Net :: FTP。

一次,我需要一個DIFFS與在本地硬盤, 導致我寫this script相應的目錄/文件結構的FTP 服務器上的目錄/文件結構的腳本。我不知道這是否是有效的或優雅,但你可能會發現一個或它的另一個 想法。

心連心/劉若英

-2

,我建議你可以先在任何服務器的登錄,並轉到appropraite路徑miabc/v75_0/A/B/C /。從這裏你需要對另一臺服務器執行sftp。

  1. SFTP用戶@服務器
  2. 轉到哪些文件需要被傳輸的appropraiate路徑。
  3. 寫命令MGET *
+0

@sachin ...我知道如何做ftp,但問題是在多個目錄中有1000個文件,所以它是一個非常困難的任務去到每個目錄和做mget。 – Vijay 2009-11-19 10:06:05

+0

我不知道下調我的原因。很高興知道它。但是,如果你有一個所有目錄的絕對路徑列表,那麼這種方法將工作在一個for循環迭代ls count – 2009-11-19 13:22:18

-1

我會使用的Expectlftp組合和遞歸函數來走的目錄結構。

-1

如果文件系統支持符號鏈接或hardlinking,我會用一個簡單的wget鏡像FTP服務器。在其中的一個,當你wgetting只是破解目錄v11_0指向75_0,wget的不會知道其中的差別。

服務器:

  1. 去/項目/服務器A
  2. wget的整個事情。(這應該把他們都在/項目/服務器A/miabc/v11_0)

服務器B:

  1. 去/項目/服務器B
  2. 創建一個目錄/項目/服務器B/miabc/75_0,它鏈接到/項目/服務器A/v11_0:
    • ln -s /project/serverb/miabc/75_0 /project/servera/v11_0
  3. wget的服務器b,這將b Ë當後面的wget試圖CWD到75_0它會發現自己在/項目/服務器A/v11_0

不要讓這個項目難度比它必須是:閱讀的wget的文檔,和LN。如果wget沒有遵循符號鏈接,請提交錯誤報告,並在FS支持時使用硬鏈接。

0

這聽起來像你真的想要rsync來代替。我試圖避免任何編程來解決這個問題。

+0

Rysnc不能從根本上解決合併/不同/目錄結構的問題。這只是一個更加高效的交通工具。 – 2009-11-20 01:43:59

+1

根據這個問題,這不是一個不同的目錄結構。他們只有一個不同的基本目錄。我一直在使用rsync。 – 2009-11-20 01:49:45

0

看到您需要使用正確的目錄路徑來發送文件。 你可以使用php創建小腳本。 php提供良好的ftp函數。使用php你可以輕鬆地ftp你的文件。但在此之前,一旦檢查IIS服務器或文件吉拉 您的FTP設置,我已經使用上的ftp這個文件發送下面的代碼是在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 

此代碼僅供參考,經過使用它之前的PHP手冊。