我为每天传输文件做了类似的事情。正如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