Here's a way you can do this programmatically (for the most part).
1: Set your media sizes (ex: thumbnail 300x300 and the rest 0x0 to keep WP from generating anything other than thumbnail.)
2: Generate the new images with WP CLI, but do not delete any of the old sizes until it's ready. Or if you really are not keeping any resized images, skip this.
$ wp media regenerate --skip-delete
3: Search replace image paths with WP CLI. This updates posts and pages content so you don't have broken images on your site.
Your regular expression will need to be something like the following.
(\/wp-content\/uploads\/)([0-9]{4}\/[0-9]{2}\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})
![Regular expression visualization](https://www.debuggex.com/i/7xo9Ypi1ESh57l6P.png)
Debuggex Demo
And would have the following wp search-replace:
$ wp search-replace '(\/wp-content\/uploads\/)([0-9]{4}\/[0-9]{2}\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})' '$1$2$3$5' --regex
Or you might have a different upload folder or don't have the year/month folders included. In that case you'd have slightly different regex
(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})
![Regular expression visualization](https://www.debuggex.com/i/aHBmaFpz_z1UiT2W.png)
Debuggex Demo
and you'd run
$ wp search-replace '(\/app\/uploads\/)(.*)(-[0-9]{1,5}x[0-9]{1,5})(\..{2,4})' '$1$2$4' --regex
Just to be clear: this would make your load times horrible - all images would serve from their full-size file and not the smaller image.
It would be a good idea perhaps to swap your image server with an image processing API / CDN so these problems go away :)
If you are at least keeping one thumbnail, like the 300x300 example I gave, you'd need to run a little different regex:
(\/wp-content\/uploads\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\..{2,4})
![Regular expression visualization](https://www.debuggex.com/i/scJ10BzDNlGzVdk_.png)
Debuggex Demo
Then you run WP CLI twice. The first swaps all the images that aren't the 72x72 thumbnail. The latter changes all the 72x72 thumbnails to the new 300x300 thumbnail
$ wp search-replace '(\/wp-content\/uploads\/)(.*)(-(?!(?:72))[0-9]{1,5}x(?!(?:72))[0-9]{1,5})(\..{2,4})' '$1$2$4' --regex
$ wp search-replace '(\/wp-content\/uploads\/)(.*)(-72x72)(\..{2,4})' '$1$2-300x300$4' --regex
4: now delete all unused images:
$ wp media regenerate