Any idea if there is actually a way to get "ctime", a file's created timestamp from a SFTP server? Using Paramiko for SFTP, I am only seeing "atime" and "mtime". However, I am trying to access the file's original created timestamp (and not the "atime").
Here is the current code I built, but commented out the part about file's created timestamp because it is causing errors:
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)
The file creation time is supported since SFTP version 4 only. Most SFTP servers (notably OpenSSH) support SFTP version 3 only. Same for Paramiko (on the client-side).
So in most cases (even if you patch Paramiko to support SFTP 4), you won't be able to retrieve the creation time from your SFTP server.
If you have a shell access to the server, you might be able to retrieve the creation time using shell commands. But that's not an SFTP question anymore.