What is the difference between --skip-existing and --no-overwrite-files?

When using kopia snapshot restore

--[no-]overwrite-files true Specifies whether or not to overwrite already existing files

--[no-]skip-existing false Skip files and symlinks that exist in the output

How should I think about this? Are these (almost) doing the same thing or are they conceptually different?

I want to restore a backup from remote but I also already have a bunch of images locally in the output folder that are the same.

I tried running with –skip-existing-files but I notice that only a small subset of the files are being skipped (I expected almost every file to be skipped).

Unfortunately, I can’t answer your question regarding the difference between the `--[no-]overwrite-files and --[no-]skip-existing` options. However, I recently had a different experience than you described: I had to restore a snapshot into an empty directory. The process took over 10 hours in total and was repeatedly interrupted for various reasons, so I had to restart the restore operation multiple times.

During this, I used the options `--skip-existing and --write-files-atomically`, and I definitely observed the expected behavior: files that had already been restored were completely skipped by Kopia on subsequent restore attempts.

As far as I know, Kopia does not support any kind of intelligent restore mechanism like some other backup tools do (see Duplicacy’s restore -hash option for example). That is, even if metadata such as file size or modification date differed, Kopia would not detect this. It only checks whether a file exists and, depending on the options used, either skips or overwrites it — by default, it overwrites existing files.