Perhaps you're documenting a visit to the radiologist, so in addition to pulse rate and blood pressure we're recording lots of giant X-ray images in lots of S3 image files.
S3 has no efficient bulk object move method.
Correct.
So upon upload, place the image file in its final resting place from the get go. It might be deleted, but it will never move.
Roll a new GUID for each uploaded file, determine today's date, and assign an S3 key like
ymd = f"{yyyy}/{mm}/{dd}"
path = f"my_bucket/image/{ymd}/{guid1}"
Remember those pathnames,
storing them in the electronic medical record.
When that record is ready,
store it as f"my_bucket/emr/{ymd}/{guid2}"
.
At some point your document retention policy will say that you've kept a file for enough years and it's time to discard it. The date-oriented pathnames will help with that. (Also, they placeplay nicely with pagination of the AWS web console.)
You might possibly want a midnight cron job which reads all recent EMR references to the day's image files, compares that with an S3 directory listing, and does something with "orphan" or "ghost" image files that have a zero ref-count.