我在下面给出2个代码。代码1将远程目录中存在的文件和文件夹下载到本地目录,代码2将远程目录中存在的文件的文件名存储。代码2中的问题是它没有附加存在于远程目录中的子文件夹的名称,而是附加了存在于该子文件夹中的文件的名称。 我的项目是制作一个代码,该代码可以比较远程目录和本地目录中的文件并下载存在于远程目录中但不在本地目录中的文件 它甚至不下载子文件夹中的文件,并抛出下面给出的错误
代码2有什么问题?预先感谢
代码1(用于将文件从远程下载到本地目录)
import os
import pysftp
from stat import S_IMODE, S_ISDIR, S_ISREG
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection('192.168.X.X', username='username',password='password',cnopts=cnopts)
def get_r_portable(sftp, remotedir, localdir, preserve_mtime=False):
for entry in sftp.listdir(remotedir):
remotepath = remotedir + "/" + entry
localpath = os.path.join(localdir, entry)
mode = sftp.stat(remotepath).st_mode
if S_ISDIR(mode):
try:
os.mkdir(localpath,mode=777)
except OSError:
pass
get_r_portable(sftp, remotepath, localpath, preserve_mtime)
elif S_ISREG(mode):
sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)
remote_path=input("enter the remote_path: ")
local_path=input("enter the local_path: ")
get_r_portable(sftp, remote_path, local_path, preserve_mtime=False)
代码2(附加文件名以列出5天以上;根据代码1编写)
import time
def get_r_portable(sftp, remotedir):
result = []
for entry in sftp.listdir_attr(remotedir):
remotepath = remotedir + "/" + entry.filename
mode = entry.st_mode
if S_ISDIR(mode):
result += get_r_portable(sftp, remotepath)
elif S_ISREG(mode):
if (time.time() - entry.st_mtime) // (24 * 3600) >= 5:
result.append(entry.filename)
return result
在远程目录中存在子文件夹时引发的错误
FileNotFoundError: [Errno 2] Invalid path.