1

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

假设有 2 个文件,a.dat_1并且位于Informatica 服务器上的b.dat_2一个目录中。low

我需要将此low目录传输到另一台服务器上,文件a.dat_1转到一个目录,local然后b.dat_2转到另一个名为local2. 这需要在 Python 中完成。

我使用 Paramiko 进行简单的传输,但没有使用目录。而不是在 local 和 local2 等单独的目录中。

4

3 回答 3

1

鉴于此 SO Directory 在 paramiko 上传输;您将无法将目录复制为批量操作。

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

于 2012-10-09T15:15:43.110 回答
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)
于 2012-10-09T19:05:34.120 回答
1

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

tar -cvf archive_name.tar directory_name

然后将此档案转移到另一台机器untar上:

tar -xvf archive_name.tar

您还可以在 tar 文件中使用 gzip 或其他压缩器,以加快传输速度。

于 2012-10-09T14:15:22.173 回答