我有一个脚本,该脚本在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")
我建议也有一些保障措施。有时库会在某些条件下引发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)
使用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在目录之间移动文件?但我有一种感觉,它没有解决,尽管它得到了回答。 重命名文件本身非常简单,没有任何问题,但是我如何将其移动到另一个目录? 我有以下示例代码: 我得到了与另一个主题相同的错误: