2011-01-12 64 views
4

我是新來的Python,所以原諒我,如果這是基本的,我已經搜索,但無法找到答案。我試圖將Perl腳本轉換爲連接到遠程服務器的Python(3.x),並將給定目錄中的文件複製到本地計算機。轉移的完整性至關重要,並且內置了幾個步驟以確保完整和準確的轉移。是否可以通過SSH使用os.walk?

第一步是獲取要傳遞給rsync的文件的完整列表。 Perl腳本具有以下行來實現:

@dir_list = `ssh [email protected] 'find $remote_dir -type f -exec /bin/dirname {} \\;'`; 
@file_list = `ssh [email protected] 'find $remote_dir -type f -exec /bin/basename {} \\;'`; 

兩列被然後join版創建$ full_list。

而不是開放兩個單獨的ssh情況下,我想開一個,用os.walk獲取使用信息:

for remdirname, remdirnames, remfilesnames in os.walk(remotedir): 
    for remfilename in remfilesnames: 
     remfulllist.append(os.path.join(remdirname, remfilename)) 

感謝您的幫助,您可以提供。

+1

除非'remotedir'掛載在某個地方,'os.walk'沒有辦法達到它。 –

+0

你是否指''dirlist'行的'-type d'?我認爲下面的@Bryan註釋,你可以基於從python調用ssh來計算dir_list和file_list。 – nealmcb

+0

如果你不需要任意的邏輯(即真正的Python代碼)來處理要複製的文件列表,那麼只要使用普通的rsync和includes/excludes/filters,你就會更加簡單和健壯。 – mnagel

回答

3

不,os.walk不能以這種方式使用。

+0

聽起來非常明確,謝謝。現在我只需要找到'ssh'命令行的最佳轉換。 – LeoB

+2

@LeoB:除非我遺漏了一些東西,你可以通過一個單一的ssh命令來獲得每個文件的完整路徑(例如:find $ remote_dir -type f)。然後,迭代該結果併爲每個完整路徑計算dirname和filename。 –

相關問題