将本地服务器上的目录中的多个文件传输到Python中远程服务器上的不同目录

时间:2012-10-09 13:09:31

标签: python ssh sftp paramiko

Informatica Server上的目录中有一些文件。我需要根据文件名将这些文件传输到另一台服务器上的不同目录。

假设在Informatica服务器上名为a.dat_1的目录中有2个文件b.dat_2low

我需要将此low目录转移到另一个服务器上,其中文件a.dat_1转到一个名为local的目录,b.dat_2转到名为{{1}的另一个目录}}。这需要在Python中完成。

我使用paramiko进行简单的传输而不是目录。而不是在本地和local2等单独的目录中。

有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以从目录中创建tar存档。为此使用shell命令

tar -cvf archive_name.tar directory_name

然后将此存档转移到另一台计算机并在那里untar

tar -xvf archive_name.tar

你也可以在你的tarred存档上使用gzip或其他压缩器来加快传输速度。

答案 1 :(得分:1)

鉴于此Directory transfers on paramiko;您将无法将目录复制为批量操作。

如果是我,我会创建一个临时文件夹,然后将源文件复制到与目标要求兼容的目录结构中。然后按yakxxx建议压缩它们,用Paramiko SFTP通过线路发送压缩文件,用另一端用Paramiko SSH解压缩。

答案 2 :(得分: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]

或者,如果zipfile已经存在并且您想要添加新文件。

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)