用Python将本地服务器上目录中的多个文件传输到远程服务器上的不同目录
Informatica服务器上的目录中有一些文件。我需要根据文件名将这些文件传输到另一台服务器的不同目录中 假设Informatica服务器上名为用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存
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)