2012-10-09 27 views
1

Informatica服務器上的目錄中有一些文件。我需要將這些文件根據文件名轉移到另一臺服務器上,並放入不同的目錄中。將本地服務器上的目錄中的多個文件傳輸到Python中的遠程服務器上的不同目錄中

假設在Informatica服務器上有一個名爲low的目錄內有2個文件a.dat_1b.dat_2

我需要在文件a.dat_1進入目錄說,localb.dat_2轉到另一個名爲local2目錄此low目錄轉移到另一臺服務器。這需要在Python中完成。

我已經使用paramiko做簡單的傳輸,但不是目錄。而不是像本地和local2這樣的單獨目錄。

有人可以幫我嗎?

回答

1

您可以將tar歸檔文件移出目錄。對於這種使用shell命令

tar -cvf archive_name.tar directory_name 

那麼這個歸檔文件傳送到另一臺機器和untar它有:

tar -xvf archive_name.tar 

您也可以在你的柏油歸檔UZE的gzip或其他壓縮,使傳輸速度更快。

1

鑑於此,SO Directory transfers on paramiko;您將無法將目錄作爲批量操作進行復制。

如果是我,我會創建一個臨時文件夾,並將源文件複製到與目標要求兼容的目錄結構中。然後將它們壓縮爲yakxxx建議,通過Paramiko SFTP通過線路發送壓縮文件,並在另一端用Paramiko SSH進行解壓縮。

+0

這種方法的問題在於,在目錄「loacl」和「local2」已經存在的第二個服務器上。因此,如果我建立一個臨時目錄並將其發送,然後解壓縮它不會有重複? – user1452759

+0

你將不會有一個重複的目錄。您可能會覆蓋這些目錄中的文件。這對你來說可能是或者可能不是壞事。在這一點上,你面臨的最大挑戰是提出一個可接受的壓縮/解壓過程。然而,用你原來的方法,在我看來,你會有額外的複雜性來處理。在我看來,它是這樣工作的過程之間的區別:「做到這一點,然後做到這一點」,以及像這樣工作的一個:「做到這一點,然後如果做到這一點,做其他事情」。前者總是比後者更吸引我。 – marklap

1

我爲每天傳輸文件做了類似的事情。正如yakxxx所示,我將文件壓縮後再傳輸。我做什麼(在Windows機器)例如:

import zipfile 
from glob import glob as gg 

files = gg('path*.txt') 
# open zip file (create it, or open if already exists) 
zFile = zipfile.ZipFile('FileName.zip','w') 

# zip files on local machine 
[zFile.write(r,r,zipfile.ZIP_DEFLATED) for r in files] 

或者,如果zip文件已經存在,並且要添加新的文件。

zFile = zipfile.ZipFile('FileName.zip','a') 

# List files already zipped. 
done = zipfile.ZipFile('FileName.zip','r').namelist() 

# zip file into zip file. 
[zFile.write(r,r,zipfile.ZIP_DEFLATED) for r in files if r not in done] 

現在通過paramiko將此zip文件推送到您的遠程機器。

---------------

編輯

僅供參考,寫入zip文件時,你必須要小心。我假設你在包含要壓縮的文件的目錄中運行。如果你不是,你需要使用:

import os 
zFile.write(r,os.path.basename(r),zipfile.ZIP_DEFLATED) 
相關問題