Informatica Server上的目录中有一些文件。我需要根据文件名将这些文件传输到另一台服务器上的不同目录。
假设在Informatica服务器上名为a.dat_1
的目录中有2个文件b.dat_2
和low
。
我需要将此low
目录转移到另一个服务器上,其中文件a.dat_1
转到一个名为local
的目录,b.dat_2
转到名为{{1}的另一个目录}}。这需要在Python中完成。
我使用paramiko进行简单的传输而不是目录。而不是在本地和local2等单独的目录中。
有人能帮助我吗?
答案 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)