Obtenez l'horodatage de création d'un fichier à l'aide de Paramiko SFTP

WBOY
Libérer: 2024-02-09 09:20:16
avant
935 Les gens l'ont consulté

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

Contenu de la question

Savez-vous s'il existe vraiment un moyen d'obtenir "ctime" (l'horodatage de création de fichier) depuis un serveur sftp ? En utilisant paramiko pour sftp, je ne vois que "atime" et "mtime". Cependant, j'essaie d'accéder à l'horodatage de création d'origine du fichier (et non à "atime").

Voici le code actuel que j'ai construit mais j'ai commenté la partie concernant l'horodatage de création du fichier car cela provoquerait une erreur :

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)
Copier après la connexion

Bonne réponse


L'heure de création de fichier n'est prise en charge qu'à partir de SFTP version 4. La plupart des serveurs SFTP (notamment OpenSSH) ne prennent en charge que la version 3 de SFTP. Il en va de même pour Paramiko (côté client).

Donc, dans la plupart des cas (même si vous patchez Paramiko pour prendre en charge SFTP 4), vous ne pourrez pas récupérer l'heure de création depuis le serveur SFTP.

Si vous disposez d'un accès shell au serveur, vous pourrez peut-être récupérer l'heure de création à l'aide des commandes shell. Mais ce n’est plus un problème SFTP.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal