Interactively synchronize contents of two directories into a merged, up-to-date version. Both sides can each have independent changes that will be resolved.
Usually, I sync files between two sites using the standard
rsync -a and/or
scp -p approach.
However, this is very cumbersome and error prone if changes have been carried out on both sides:
For each directory (or even file) that has been touched on either side, it has to be determined
in advance which side should take precedence (e.g. by a preliminary dry-run and manual inspection).
syncd will ease the task of recursively merging two directories with each having independent
changes: For each file or directory with different attributes (permissions, timestamps, existence,
… – but no content checksum), a proposed bi-directional resolution strategy is derived. The user
can then choose to accept, skip, or provide a custom action for each found difference
interactively.
Merging directories: usage
The only mandatory arguments are the directories to work on. Their order is only relevant in
presence of other arguments that refer to a specific side (a or b suffix):
syncd [--delete-excluded[-a|-b]] [--keep-(a|b)] [--dry-run] [--backup[-a|-b]=dirname] a/ b/
--dry-run- Will show what changes would have been proposed, but without actually doing anything. Afterwards, you can select to re-run with automatically performing all changes, but I am not confident enough to recommend this.
--keep-(a|b)- Will selectively prevent changes to either side.
--backup[-a|-b]- Creates the respective directory name relative to the directory to sync and moves into it instead of deleting or replacing, s.t. file contents won’t be lost.
--delete-excluded[-a|-b]- Per default, several file-/dir-names will be (silently)
skipped, e.g.
*.oor.git. (There is currently no way to provide custom exclusions – please edit the list in the code if needed.) Giving this option will ask for deletion on both or either sides instead.
Warning: This tool was built for (and tested with) only certain scenarios. There are still many things to be done regarding error recovery, atomicity, and correctness/robustness in general. Use only interactively, offline, and with caution!
To build locally, simply type make. No special dependencies or additional external libraries are
needed. System-wide installation is not required but make install will (build and) copy the binary
into the system. make uninstall will remove it again.

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.