简体   繁体   English

使用 Paramiko 将文件从一个目录移动到另一个目录

[英]Move files from one directory to another with Paramiko

I have a script that creates and tmp directory on an SFTP server and then puts files in said /tmp once the transfer is complete however I need to move the files from /tmp back one directory to root / .我有一个脚本,它在 SFTP 服务器上创建 tmp 目录,然后在传输完成后将文件放在所述/tmp中,但是我需要将文件从/tmp移回一个目录到 root / Use Paramiko how would I move the files from one remote directory to another?使用 Paramiko 如何将文件从一个远程目录移动到另一个?

Step guide:步骤指南:

Local files -----> Remote Temporary Dir ----> Remote root Dir本地文件-----> 远程临时目录----> 远程根目录

Code below if needed:如果需要,请使用以下代码:

#!/usr/bin/python

# --------------------------------------------------------------------
#import libraries
# --------------------------------------------------------------------
import paramiko as PM
import os
import datetime

# --------------------------------------------------------------------
# Global Variables
# --------------------------------------------------------------------

host = 'host IP address'
port = 22
username = 'Username'
password = '*********'

# Variable Paths

localPath = '/shares/MILKLINK/fromML'
remotePath = '/'
logPath = '/shares/MILKLINK/logs/PPcfg02.log'
SRCfiles = '/shares/MILKLINK/Milklink.cpy'

# --------------------------------------------------------------------
#  Create LOG FILE
# --------------------------------------------------------------------

log = open(logPath, 'a')
log.write(datetime.datetime.now().isoformat()+'\n')

# Creating lockfile

if(os.path.isfile('LockSFTP')):
    log.write("LOCK FILE STILL EXISTS!")
    quit()
else:    
    os.system(">LockSFTP")

# --------------------------------------------------------------------
# Remove all files from /formML/ 
# --------------------------------------------------------------------

fileList = os.listdir(localPath)
for fileName in fileList:
    try:
        os.remove(localPath+"/"+fileName)
    except OSError:
        log.write("%s could not be deleted\n" % fileName)

# --------------------------------------------------------------------
#  Create SFTP CONNECTION
# --------------------------------------------------------------------

log.write("Starting Connection...\n")
# SSH connection
ssh_Connection = PM.Transport((host, port))
ssh_Connection.connect(username = username, password = password)

# Creaat SFTP CLIENT SERVICES
sftp = PM.SFTPClient.from_transport(ssh_Connection) 

log.write("Connection Established...\n")

remoteList = sftp.listdir(remotePath)
fileList = os.listdir(SRCfiles)
try:
    sftp.chdir(remotePath+'/tmp')
except IOError:
    sftp.mkdir(remotePath+'/tmp')
    sftp.chdir(remotePath+'/tmp')

for fileName in fileList:
    if 'comphaulier.asc' not in remoteList:
        if 'Last' in fileName:
            continue
        else:
            sftp.put(SRCfiles+'/'+fileName, remotePath+'/tmp/'+fileName)

        log.write(fileName+" Transferred\n")
    else:
        log.write("Files Still Exist\n")
        log.close()
        quit()

checkList = sftp.listdir(remotePath)

if len(checkList) == 7:
    sftp.put(SRCfiles+'/LastFile.lst', remotePath+'/LastFile.lst')
    log.write("LastFile.lst Transferred\n")
else:
    log.write("Not all files transferred!!!\n")
    quit()

sftp.close()
ssh_Connection.close()

os.system("rm LockSFTP")

Use the sftp.rename :使用sftp.rename

sftp.rename(remotePath+'/tmp/'+fileName, remotePath+fileName)

Note that some SFTP servers fail the request, if the source and target directories are on different file systems.请注意,如果源目录和目标目录位于不同的文件系统上,则某些 SFTP 服务器会使请求失败。


If you need to move set of files from one folder to another, see:如果您需要将一组文件从一个文件夹移动到另一个文件夹,请参阅:
Archive all files from one SFTP folder to another in Python在 Python 中将所有文件从一个 SFTP 文件夹存档到另一个文件夹

I would suggest having also some safeguards.我建议也有一些保障措施。 Sometimes the library will raise an IOError in certain conditions (the destination file exists already or the file to move does not exist).有时库会在某些情况下引发 IOError (目标文件已经存在或要移动的文件不存在)。 I will assume you have an sftp client sftp_client我假设你有一个 sftp 客户端sftp_client

def move_file(self, source, destination):
    destination_file_exists = __file_exists(destination)
    source_file_exists = __file_exists(source)
    if destination_file_exists:
        # handle the condition accordingly
        print(f"destination file {destination} already exists")
    else:
        if source_file_exists:
            sftp_client.rename(source, destination)
        else:
            # handle the condition accordingly
            print(f"source file {source} does not exist")

def __file_exists(file_path):
    try:
        sftp_client.stat(file_path)
        return True
    except FileNotFoundError as e:
        return False
    except Exception as e:
        print(e)

As you are already importing the os library use:因为您已经导入了 os 库,请使用:

os.path.join(path, filename) 

To obtain correct absolute paths and avoid dealing with duplicated or lacking / by the use of wild concatenations like above:要获得正确的绝对路径并避免处理重复或缺少 / 通过使用像上面这样的野生连接:

ie IE

f_w_current_path = os.path.join(current_path, f.filename)
f_w_temporary_path = os.path.join(temporary_path, f.filename)
sftp.rename(f_w_current_path, f_w_temporary_path)

the use of rename to move the file remotely with paramiko library it's working for me.使用重命名通过 paramiko 库远程移动文件,它对我有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 根据特定的行将文件从一个目录移动到另一个目录 - move files from one directory to another based on a specific line 将所有文件从一个目录移动到另一个磁盘空间有限的目录 - Move all files from one directory to another with limited disk space 如何有条件地将文件从一个目录移动到另一个目录? - How to conditionally move files from one directory to another? 将某些文件从一个目录移动到另一个目录-Python - Move Certain Files from One Directory to Another - Python 如何将文件从一个目录移动到另一个目录? - How to move files from a directory to another? 根据条件将文件从一个目录移动到另一个目录 - Move Files from a Directory to Another Based on a Condition 如何将文件从一个目录移动到另一个目录? - How to move a file from one directory to another? 如何从一个目录移动到另一个目录并仅删除python中的'.html'文件? - How to move from one directory to another and delete only '.html' files in python? 如果文件出现在Python的文本文件中,则将文件从一个目录移动到另一个目录(请参阅2) - Move files from one directory to another if they appear in a text file in Python (take 2) 使用 Python 代码将 100 个文件中的前 5 个文件从一个目录移动到另一个目录 - Move first 5 files out of 100 from one directory to another using Python code
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM