# create SSHClient instance
ssh = paramiko.SSHClient()
list = []
# AutoAddPolicy automatically adding the hostname and new host key
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(hostname, port, username, password)
stdin, stdout, stderr = ssh.exec_command("cd *path*; ls")
for i in stdout:
list.append(i)
sftp = ssh.open_sftp()
for i in list:
tempremote = ("*path*" + i).replace('\n', '')
templocal = ("*path*" + i).replace('\n', '')
try:
#Get the file from the remote server to local directory
sftp.get(tempremote, templocal)
except Exception as e:
print(e)
远程服务器文件修改日期Stat:6/10/2018 10:00:17
本地文件日期已修改统计信息:当前日期时间
但是我发现修改后的日期在复制文件后发生了改变。
反正还有将远程文件和文件统计信息复制到本地文件吗?
答案 0 :(得分:4)
在传输文件时,Paramiko确实不会保留时间戳。
下载后,您必须显式调用os.utime
。
请注意,pysftp(内部使用Paramiko)支持保留带有其pysftp.Connection.get()
method的时间戳。
您可以重复使用它们的实现(我简化了代码):
sftpattrs = sftp.stat(tempremote)
os.utime(templocal, (sftpattrs.st_atime, sftpattrs.st_mtime))
与uploads类似。
答案 1 :(得分:1)
似乎没有一种方法可以使用paramiko SFTP模块中记录的统计信息进行复制。但是,这样做是有道理的,因为除了时间以外,还复制远程文件的统计信息不一定有意义(即,用户/组ID在本地计算机上就没有意义)。
您可以只复制文件,然后使用SFTP客户端的stat
或lstat
方法获取atime / mtime / ctime,然后使用os.utime
在本地文件上进行设置。