2012-10-09 25 views
1

Informatica服务器上的目录中有一些文件。我需要将这些文件根据文件名转移到另一台服务器上,并放入不同的目录中。将本地服务器上的目录中的多个文件传输到Python中的远程服务器上的不同目录中

假设在Informatica服务器上有一个名为low的目录内有2个文件a.dat_1b.dat_2

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

我已经使用paramiko做简单的传输,但不是目录。而不是像本地和local2这样的单独目录。

有人可以帮我吗?

回答

1

您可以将tar归档文件移出目录。对于这种使用shell命令

tar -cvf archive_name.tar directory_name 

那么这个归档文件传送到另一台机器和untar它有:

tar -xvf archive_name.tar 

您也可以在你的柏油归档UZE的gzip或其他压缩,使传输速度更快。

1

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

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

+0

这种方法的问题在于,在目录“loacl”和“local2”已经存在的第二个服务器上。因此,如果我建立一个临时目录并将其发送,然后解压缩它不会有重复? – user1452759

+0

你将不会有一个重复的目录。您可能会覆盖这些目录中的文件。这对你来说可能是或者可能不是坏事。在这一点上,你面临的最大挑战是提出一个可接受的压缩/解压过程。然而,用你原来的方法,在我看来,你会有额外的复杂性来处理。在我看来,它是这样工作的过程之间的区别:“做到这一点,然后做到这一点”,以及像这样工作的一个:“做到这一点,然后如果做到这一点,做其他事情”。前者总是比后者更吸引我。 – marklap

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] 

或者,如果zip文件已经存在,并且要添加新的文件。

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) 
相关问题