I use something like this as part of my backup DATE=$(date +%C%y%m%d%H%M)
rsync --del --backup --backup-dir=../changedfiles_$DATE
The whole backup also goes to S3 glacier.
As an added step - I don't delete pictures from my camera unless they match the checksum of files in the _backup_ - not the original copy (via a script).
That way, once they're first copied from the camera, a single failure in the original, PC copy or backup copy will all result in the camera version remaining and I can check what has gone wrong.