Heim  >  Artikel  >  Backend-Entwicklung  >  Erhalten Sie den Erstellungszeitstempel einer Datei mit Paramiko SFTP

Erhalten Sie den Erstellungszeitstempel einer Datei mit Paramiko SFTP

WBOY
WBOYnach vorne
2024-02-09 09:20:16865Durchsuche

使用 Paramiko SFTP 获取文件的创建时间戳

Frageninhalt

Wissen Sie, ob es wirklich eine Möglichkeit gibt, „ctime“ (den Zeitstempel der Dateierstellung) von einem SFTP-Server abzurufen? Wenn ich Paramiko für SFTP verwende, sehe ich nur „atime“ und „mtime“. Ich versuche jedoch, auf den ursprünglichen Erstellungszeitstempel der Datei zuzugreifen (nicht auf „atime“).

Dies ist der aktuelle Code, den ich erstellt habe, aber den Teil über den Zeitstempel der Dateierstellung habe ich auskommentiert, da dies einen Fehler verursachen würde:

for file in tqdm(sftp.listdir()):
    # Debug check:
    print('We are now in the try loop:')
    
    # Look for files that have the same starting 25 characters as the column
    # in the mapper file:
    mask = mapper.file_name_startswith.str[:25].str.contains(file[:25])
    
    # Grab the destination path info from the mapper file:
    dest_path = mapper[mask]['destination_path'].values[0]

    # Get the timestamp of the original file before we remove it, for both modified & created:
    remote_mod_time = sftp.stat(file).st_mtime 
    # Need to use a different method to get the created date:
    '''
    remote_file_attrs = sftp.listdir_attr('.')  
    for attr in remote_file_attrs:  
        if attr.filename == file:  
            remote_create_time = attr.st_ctime  
            break  
    '''       
    # Move the current file to our desired local (destination) path:
    local_path = os.path.join(dest_path, file)
    sftp.get(file, local_path)

    # Set the modified date timestamp of the downloaded file to match the timestamp of the original     file:  
    os.utime(local_path, (remote_mod_time, remote_mod_time)) 

    # Set the created date (cannot use os.utime for this) to match the timestamp of the original file:
    #date_time = pywintypes.Time(remote_create_time)  
    #win32file.SetFileTime(local_path, date_time, None, None)  
    
    # Remove the current file, which is being processed, from the sftp server:
    #sftp.remove(file)
    
    # Append the file to the "done_file" list:
    done_files.append(file)

Richtige Antwort


Die Dateierstellungszeit wird erst ab SFTP-Version 4 unterstützt. Die meisten SFTP-Server (insbesondere OpenSSH) unterstützen nur SFTP Version 3. Das Gleiche gilt für Paramiko (auf der Kundenseite).

In den meisten Fällen (selbst wenn Sie Paramiko auf die Unterstützung von SFTP 4 patchen) können Sie die Erstellungszeit nicht vom SFTP-Server abrufen.

Wenn Sie Shell-Zugriff auf den Server haben, können Sie die Erstellungszeit möglicherweise mithilfe von Shell-Befehlen abrufen. Dies ist jedoch kein SFTP-Problem mehr.

Das obige ist der detaillierte Inhalt vonErhalten Sie den Erstellungszeitstempel einer Datei mit Paramiko SFTP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen