Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dapatkan cap masa penciptaan fail menggunakan Paramiko SFTP

Dapatkan cap masa penciptaan fail menggunakan Paramiko SFTP

WBOY
WBOYke hadapan
2024-02-09 09:20:16865semak imbas

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

Kandungan soalan

Adakah anda tahu jika benar-benar ada cara untuk mendapatkan "ctime" (cap masa penciptaan fail) daripada pelayan sftp? Menggunakan paramiko untuk sftp, saya hanya melihat "atime" dan "mtime". Walau bagaimanapun, saya cuba mengakses cap masa penciptaan asal fail (bukan "masa").

Ini ialah kod semasa yang saya bina tetapi mengulas bahagian tentang cap waktu penciptaan fail kerana ia akan menyebabkan ralat:

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)

Jawapan betul


Masa penciptaan fail hanya disokong bermula dengan SFTP versi 4. Kebanyakan pelayan SFTP (terutama OpenSSH) hanya menyokong SFTP versi 3. Begitu juga dengan Paramiko (di pihak pelanggan).

Jadi dalam kebanyakan kes (walaupun anda menampal Paramiko untuk menyokong SFTP 4) anda tidak akan dapat mendapatkan semula masa penciptaan daripada pelayan SFTP.

Jika anda mempunyai akses shell ke pelayan, anda mungkin boleh mendapatkan semula masa penciptaan menggunakan arahan shell. Tetapi ini bukan lagi isu SFTP.

Atas ialah kandungan terperinci Dapatkan cap masa penciptaan fail menggunakan Paramiko SFTP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam