当前位置: 首页 > 知识库问答 >
问题:

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

梁勇
2023-03-14

我有一个脚本,该脚本在SFTP服务器上创建tmp目录,然后在传输完成后将文件放入所述/tmp,但是我需要将文件从/tmp移回一个目录到根目录/。使用Paramiko如何将文件从一个远程目录移动到另一个远程目录?

步骤指南:

本地文件-----

如有需要,代码如下:

#!/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")

共有2个答案

卢朝
2023-03-14

我建议也有一些保障措施。有时库会在某些条件下引发IOError(目标文件已经存在或要移动的文件不存在)。我假设你有一个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)
微生啸
2023-03-14

使用sftp。重命名

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

请注意,如果源目录和目标目录位于不同的文件系统上,则某些SFTP服务器会导致请求失败。

如果需要将文件集从一个文件夹移动到另一个文件夹,请参阅:
在Python中将所有文件从一个SFTP文件夹归档到另一个文件夹

 类似资料:
  • 我正在使用QT,我无法找到如何将文件从一个目录复制到另一个目录?我怎样才能做到这一点?

  • 问题内容: 我想使用Java将文件从一个目录复制到另一个目录(子目录)。我有一个包含文本文件的目录dir。我遍历dir中的前20个文件,并想将它们复制到dir目录中的另一个目录中,该目录是我在迭代之前创建的。在代码中,我想将(代表第ith个文本文件或审阅)复制到。我怎样才能做到这一点?似乎没有这样的功能(或者我找不到)。谢谢。 问题答案: 目前,这应该可以解决你的问题 从类阿帕奇公地IO库,因为1

  • 问题内容: 说我在目录中还有一个文件。如何替换为使用?我在Windows XP上,跨平台的解决方案会很棒,但是Windows是首选。 问题答案: 您可以使用以下 功能: 在其手册页中引用了几个相关的句子: 将文件源的副本复制到dest。 如果目标文件已经存在,它将被覆盖。

  • 我使用SSH SFTP采样器在jmeter中进行SFTP测试。我可以将文件从Ftp位置获取/Put到本地位置,反之亦然。但我无法将文件从同一FTP位置的一个目录移动到另一个目录。 请建议。

  • 问题内容: 我的目标是每当文件滚动到此滚动文件时,该文件也会移动到另一个目录,因此在原始目录中始终只有。这可能使用吗?还是默认库中的另一个appender ? 问题答案: 我想你的意思是来自Log4J 如果您使用版本> = 1.2.16和log4j-extras,则可以使用此版本 重要的是 但是您必须确保该文件夹(在此示例中存在

  • 我需要使用JSch库编程文件传输。我有一个包含两个文件夹的简单目录- 在SFTP\u 1文件夹中,我有一个位图图像。而SFTP\U 2文件夹只是一个空文件夹。我的目标是使用SFTP将图像从SFTP\U 1传输到SFTP\U 2。 以下是迄今为止我的代码: 我想做的是简单地将文件从我机器中的一个目录传输到另一个目录。任何提示,谢谢!

  • 在过去的几个小时里,我一直在努力解决这个问题,如果不再次下载和上传文件,我真的找不到一个方法来解决这个问题。有可能吗? 这个问题类似于这个问题:我如何使用FTP在目录之间移动文件?但我有一种感觉,它没有解决,尽管它得到了回答。 重命名文件本身非常简单,没有任何问题,但是我如何将其移动到另一个目录? 我有以下示例代码: 我得到了与另一个主题相同的错误: