Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python将本地服务器上目录中的多个文件传输到远程服务器上的不同目录_Python_Ssh_Sftp_Paramiko - Fatal编程技术网

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

用Python将本地服务器上目录中的多个文件传输到远程服务器上的不同目录,python,ssh,sftp,paramiko,Python,Ssh,Sftp,Paramiko,Informatica服务器上的目录中有一些文件。我需要根据文件名将这些文件传输到另一台服务器的不同目录中 假设Informatica服务器上名为low的目录中有两个文件,a.dat_1和b.dat_2 我需要将这个low目录转移到另一台服务器上,文件a.dat_1进入一个目录,比如说,local和b.dat_2进入另一个名为local2的目录。这需要在Python中完成 我用Paramiko做过简单的传输,但没有目录。并且不在单独的目录中,如local和local2。您可以从目录中创建tar存

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

假设Informatica服务器上名为
low
的目录中有两个文件,
a.dat_1
b.dat_2

我需要将这个
low
目录转移到另一台服务器上,文件
a.dat_1
进入一个目录,比如说,
local
b.dat_2
进入另一个名为
local2
的目录。这需要在Python中完成


我用Paramiko做过简单的传输,但没有目录。并且不在单独的目录中,如local和local2。

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

tar -cvf archive_name.tar directory_name
然后将此存档转移到另一台机器,并
untar

tar -xvf archive_name.tar
您还可以在tarred归档文件上使用uze gzip或其他压缩程序,以加快传输速度;您将无法将目录作为批量操作进行复制


如果是我,我会创建一个临时文件夹,首先将源文件复制到与目标要求兼容的目录结构中。然后按照建议进行压缩,使用Paramiko SFTP通过网络发送压缩文件,并使用Paramiko SSH在另一端解压。

我每天都会做类似的事情来传输文件。正如yakxxx所建议的,我先压缩文件,然后再传输。我的工作示例(在Windows计算机上):

或者,如果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)

这种方法的问题在于,第二台服务器上已经存在目录“loacl”和“local2”。所以,如果我建立了一个临时目录,并将它发送过来,然后解压缩它,我就不会有一个重复的目录了?你就不会有一个重复的目录了。您可以覆盖这些目录中的文件。这可能对你来说是件坏事,也可能不是。在这一点上,您最大的挑战是提出一个可接受的压缩/解压缩过程。然而,在我看来,使用您最初的方法,您将有更多的复杂性需要处理。在我看来,这是这样一个过程与这样一个过程的区别:“做这个,然后这个,然后这个”和这样一个过程的区别:“做这个,如果这个做了,那么其他的做其他的”。前者总是比后者更吸引我。
import os
zFile.write(r,os.path.basename(r),zipfile.ZIP_DEFLATED)