A partly populated destination often needs new source files without replacing receiver-side copies that are already there. The --ignore-existing option makes rsync create missing paths while leaving every existing destination file untouched.

The --ignore-existing option is a transfer rule rather than a file-list filter. rsync still enters existing destination directories to find missing files below them, and the rule applies because a path exists—not because its content is complete or valid.

A partial, corrupt, or locally edited destination file is therefore skipped just like a good copy. Verify important receiver-side files before relying on this mode, and keep deletion options out of the command when destination-only content must remain.

Steps to skip existing destination files with rsync:

  1. List the files already present in the source and destination.
    $ find /srv/source /srv/destination -type f -printf '%p\n'
    /srv/source/reports/summary.txt
    /srv/source/reports/weekly.txt
    /srv/source/media/photo.txt
    /srv/destination/keep-local.txt
    /srv/destination/reports/summary.txt

    Replace /srv/source and /srv/destination with the real paths. Here, reports/summary.txt is the existing file to protect, and keep-local.txt exists only on the destination.

  2. Record the source and destination hashes for the protected path.
    $ sha256sum /srv/source/reports/summary.txt /srv/destination/reports/summary.txt
    5c393d41616d9c296fb363b3058f460297c20f32fd1ff7ca2054af9c7c4c67da  /srv/source/reports/summary.txt
    e3c66916c0a2674465034667f11856db98884f216e461f9425f84556e0c97d48  /srv/destination/reports/summary.txt

    The different hashes establish that the destination file has different content before the transfer.

  3. Preview the transfer with skipped-file reasons and itemized changes.
    $ rsync -a --ignore-existing --dry-run --itemize-changes --info=skip2 /srv/source/ /srv/destination/
    reports/summary.txt exists (file change)
    cd+++++++++ media/
    >f+++++++++ media/photo.txt
    >f+++++++++ reports/weekly.txt

    The exists (file change) line identifies the protected path. A >f+++++++++ line identifies a missing file that rsync would create.
    Related: How to preview rsync changes before syncing
    Related: How to read rsync itemized changes

  4. Run the same transfer without --dry-run after the preview shows only intended creates and skips.
    $ rsync -a --ignore-existing --itemize-changes --info=skip2 /srv/source/ /srv/destination/
    reports/summary.txt exists (file change)
    cd+++++++++ media/
    >f+++++++++ media/photo.txt
    >f+++++++++ reports/weekly.txt

    Do not add --delete when destination-only files must stay. --ignore-existing prevents updates to existing destination files, but transfer rules do not protect extra destination files from a requested deletion pass.

  5. Repeat the hash comparison for the protected path.
    $ sha256sum /srv/source/reports/summary.txt /srv/destination/reports/summary.txt
    5c393d41616d9c296fb363b3058f460297c20f32fd1ff7ca2054af9c7c4c67da  /srv/source/reports/summary.txt
    e3c66916c0a2674465034667f11856db98884f216e461f9425f84556e0c97d48  /srv/destination/reports/summary.txt

    The destination hash is unchanged from the pre-transfer value, while its difference from the source hash confirms that rsync did not replace the file.

  6. Compare the source and destination hashes for the newly copied files.
    $ sha256sum /srv/source/reports/weekly.txt /srv/destination/reports/weekly.txt /srv/source/media/photo.txt /srv/destination/media/photo.txt
    1f8aa92f5d89dc27b82e182c312d88a88394259859ffbde0db07e2cf9e730c10  /srv/source/reports/weekly.txt
    1f8aa92f5d89dc27b82e182c312d88a88394259859ffbde0db07e2cf9e730c10  /srv/destination/reports/weekly.txt
    9dd921aa831fdc66fce32a85416d5d9ba8dbbbd0e503594a18672560839f84ba  /srv/source/media/photo.txt
    9dd921aa831fdc66fce32a85416d5d9ba8dbbbd0e503594a18672560839f84ba  /srv/destination/media/photo.txt
  7. List the final destination files.
    $ find /srv/destination -type f -printf '%P\n'
    keep-local.txt
    reports/summary.txt
    reports/weekly.txt
    media/photo.txt

    reports/weekly.txt and media/photo.txt are the missing files that were added. reports/summary.txt remains the protected existing file, and keep-local.txt confirms that destination-only content was retained.