実際にsftpサーバーから「ctime」(ファイル作成時のタイムスタンプ)を取得する方法があるかご存知ですか? SFTP に paramiko を使用すると、「atime」と「mtime」しか表示されません。ただし、ファイルの元の作成タイムスタンプ(「atime」ではない)にアクセスしようとしています。
これは私が構築した現在のコードですが、エラーが発生する可能性があるため、ファイル作成タイムスタンプに関する部分をコメントアウトしました。
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)
したがって、ほとんどの場合 (SFTP 4 をサポートするために Paramiko にパッチを当てたとしても) SFTP サーバーから作成時刻を取得することはできません。
サーバーへのシェル アクセス権がある場合は、シェル コマンドを使用して作成時刻を取得できる場合があります。しかし、これはもはや SFTP の問題ではありません。
以上がParamiko SFTP を使用してファイルの作成タイムスタンプを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。