Maison  >  Article  >  développement back-end  >  Obtenez l'horodatage de création d'un fichier à l'aide de Paramiko SFTP

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

WBOY
WBOYavant
2024-02-09 09:20:16865parcourir

使用 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)

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer