Python Paramiko SFTP получить файл вместе с отметкой времени / stat файла - PullRequest
0 голосов
/ 08 ноября 2018
# 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)

Дата изменения файла удаленного сервера Стат: 6/10/2018 10: 00: 17

Local File Date Modified Stat: Текущая дата и время

Но я обнаружил, что измененная дата изменилась после завершения копирования файла.

Есть ли в любом случае скопировать удаленный файл вместе со статистикой файла в локальный файл?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Paramiko действительно не сохранит отметку времени при передаче файлов.

Вы должны явно вызвать os.utime после загрузки.


Обратите внимание, что pysftp (который внутренне использует Paramiko) поддерживает сохранение метки времени с помощью pysftp.Connection.get() метода .

Вы можете повторно использовать их реализацию (код, упрощенный мной):

sftpattrs = sftp.stat(tempremote)
os.utime(templocal, (sftpattrs.st_atime, sftpattrs.st_mtime))

Аналогично для загрузок .

0 голосов
/ 08 ноября 2018

Похоже, нет способа скопировать с помощью статистики, задокументированной в модуле SFTP paramiko. Однако имеет смысл, потому что копирование статистики, кроме времени для удаленного файла, не обязательно имеет смысл (то есть идентификаторы пользователя / группы не будут иметь смысла на вашем локальном компьютере).

Вы можете просто скопировать файл, затем получить atime / mtime / ctime, используя методы stat или lstat SFTP-клиента, и установить их в локальном файле, используя os.utime.

...