簡體   English   中英

使用 Python 將本地服務器上一個目錄中的多個文件傳輸到遠程服務器上的不同目錄

[英]Transfer multiple files in a directory on a local server to different directories on remote server in Python

Informatica 服務器上的目錄中有一些文件。 我需要根據它們的文件名將這些文件傳輸到另一台服務器到不同的目錄中。

假設 Informatica 服務器上名為low的目錄中有 2 個文件, a.dat_1b.dat_2

我需要將此low目錄傳輸到另一台服務器上,其中文件a.dat_1轉到一個目錄,例如localb.dat_2轉到另一個名為local2目錄。 這需要在 Python 中完成。

我使用 Paramiko 進行簡單的傳輸,但不是目錄。 而不是在像 local 和 local2 這樣的單獨目錄中。

您可以從您的目錄中制作tar存檔。 為此使用 shell 命令

tar -cvf archive_name.tar directory_name

然后將此存檔傳輸到另一台機器並在那里untar

tar -xvf archive_name.tar

您還可以在 tarred 存檔中使用 gzip 或其他壓縮程序,以加快傳輸速度。

鑒於此 SO 目錄在 paramiko 上傳輸 您將無法將目錄復制為批量操作。

如果是我,我會創建一個臨時文件夾並首先將源文件復制到與您的目標要求兼容的目錄結構中。 然后按照yakxxx 的建議壓縮它們,使用Paramiko SFTP 通過網絡發送壓縮文件,並在另一端使用 Paramiko SSH 解壓縮。

我每天都做類似的事情來傳輸文件。 正如 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM