I don't think there's a way to do this in the Lightroom GUI, but you could do it via a script:
- Get the paths of the photos not in a collection, either by accessing the LR database via SQLite(make a back-up!) or by going to the smart collection and dragging-and-dropping the photos into a text editor
- Now you have a list of full pathnames to the photos you want to move, I imagine it would look something like:
/Users/0pt1m1z3/photo_archive/2020/07/20200730/IMG_00001.CR2
/Users/0pt1m1z3/photo_archive/2020/07/20200730/IMG_00002.CR2
/Users/0pt1m1z3/photo_archive/2020/07/20200730/IMG_00003.CR2
/Users/0pt1m1z3/photo_archive/2020/07/20200730/IMG_00004.CR2
/Users/0pt1m1z3/photo_archive/2020/05/20200510/IMG_00001.CR2
/Users/0pt1m1z3/photo_archive/2020/05/20200510/IMG_00001.CR2
/Users/0pt1m1z3/photo_archive/2020/05/20200511/IMG_00003.CR2
- Copy that list and apply some regex to change the first few levels of the path to match the intended destination, i.e.:
/Volumes/Back-up_photos/2020/07/20200730/IMG_00001.CR2
/Volumes/Back-up_photos/2020/07/20200730/IMG_00002.CR2
/Volumes/Back-up_photos/2020/07/20200730/IMG_00003.CR2
/Volumes/Back-up_photos/2020/07/20200730/IMG_00004.CR2
/Volumes/Back-up_photos/2020/05/20200510/IMG_00001.CR2
/Volumes/Back-up_photos/2020/05/20200510/IMG_00001.CR2
/Volumes/Back-up_photos/2020/05/20200511/IMG_00003.CR2
- Now you have two filelists, one containing the origin, one the destination.
- Pick any scripting language you're comfortable with and write a script that loops through the lists and copies the file from origin to destination. In pseudocode something like:
origin = load_file(origin.txt)
destination = load_file(destination.txt)
for i in length(origin):
print(f"Copying file {origin(i)}")
copy(origin(i), destination(i))
It's important in this whole process that the list order does not change in the origin or the destination list. You could add some verification to your script to make sure. Alternatively you could skip step 3, and come up with the destination path on the fly in your script.