我爲每天傳輸文件做了類似的事情。正如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)
這種方法的問題在於,在目錄「loacl」和「local2」已經存在的第二個服務器上。因此,如果我建立一個臨時目錄並將其發送,然後解壓縮它不會有重複? – user1452759
你將不會有一個重複的目錄。您可能會覆蓋這些目錄中的文件。這對你來說可能是或者可能不是壞事。在這一點上,你面臨的最大挑戰是提出一個可接受的壓縮/解壓過程。然而,用你原來的方法,在我看來,你會有額外的複雜性來處理。在我看來,它是這樣工作的過程之間的區別:「做到這一點,然後做到這一點」,以及像這樣工作的一個:「做到這一點,然後如果做到這一點,做其他事情」。前者總是比後者更吸引我。 – marklap