Python Paramiko SFTP получить файл вместе с отметкой времени / статистики файла
# 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)
Дата изменения файла удаленного сервера Стат: 10.10.2008 10:00:17
Локальный файл Дата Изменено Стат: Текущее время
Но я обнаружил, что дата изменения изменилась после завершения копирования файла.
Есть ли способ скопировать удаленный файл вместе со статистикой файла в локальный файл?
2 ответа
Paramiko действительно не сохранит временную метку при передаче файлов.
Вы должны явно назвать os.utime
после загрузки.
Обратите внимание, что pysftp (который внутренне использует Paramiko) поддерживает сохранение метки времени с помощью pysftp.Connection.get()
метод.
Вы можете повторно использовать их реализацию (код, упрощенный мной):
sftpattrs = sftp.stat(tempremote)
os.utime(templocal, (sftpattrs.st_atime, sftpattrs.st_mtime))
Аналогично для загрузки.
Кажется, нет способа скопировать статистику, задокументированную в SFTP-модуле paramiko. Однако это имеет смысл, потому что копирование статистики, кроме времени для удаленного файла, не обязательно имеет смысл (т.е. идентификаторы пользователя / группы не будут иметь смысла на вашей локальной машине).
Вы можете просто скопировать файл, а затем получить atime/ mtime/ ctime, используя SFTP-клиент stat
или же lstat
методы и установить их в локальном файле, используя os.utime
,