i made a versatile syncing cli program, lunas, that's capable of syncing local to local, local to remote, remote to local and remote to remote at the same time with many input directories, with their file attributes if enabled and more. It syncs both ways but it has src/dest options that can be assigned to individual input directories
it runs locally, unless remote syncing is used then it runs peer-to-peer using libssh/sftp
It can do sync removal between different input directories, meaning if u want to remove a file/directory that you don't want to sync back to other directories, you can "lunas -rm file" for local or "lunas -rrm user@ip:/path/to/dir" for remote and then use the option "-cr Y" while syncing to remove it from every other directories, or simply don't use this option and it should be ignored without removal, or "-cr S" and it should be synced back to the directory it was removed from, IF it was found in one of the other directories
it has an optional config file for defining presets for easier syncing instead of writing them each time in the cli
there are more options to it which can be found in the --help or in the man page for more details
all of these dirs should be the same at the end, since -p is src and dest at the same time, same for -r
config file -> which many presets could be defined and used very conveniently " lunas -c preset_name"
path : ~/.config/lunas/lunas.conf
global{
resume = on # resume file syncing if it was interrupted
progress = on # show progress bar for file syncing
update = on # check for file mtimes and resync them based on mtime difference. Newer to old
mkdir = on # make input directories if not there
compression = on # in remote transfer, zlib is used
}
cool{
p = /path/to/dir
r = user@ip:/path/to/dir
verbose = on
attributes = atime
}
command > lunas -c cool
using this command lunas would load what's in the preset named "cool", and tries to sync the paths inside them and enable the options. And there is >the special preset called "global" which can always run while using -c preset, or normally using the cli "lunas -p dir -p dir2" this basically lets the user >defined their default options that make sense for them instead of rewriting them in the cli each time
btw lunas can load multiple presets at once
lunas -c cool -c other_preset -c etc
sync removal -> to sync remove files from other directories
in case someone wanted to delete a directory or file and don't want them to be synced back to other backup directories for instance, or want them >removed, they could use sync removal. By default it acts as excluding, unless -cr Y is used, then it should remove them from other input directories, >if found
or --exclude can be used to exclude files without removing them, i'm thinking of maybe adding a .lunasignore file similar to .gitignore to make this >extra convenient
lunas doesn't have as many options as rsync, it still has many tho, u could take a quick look at both of them to compare if you want. But i'm still developing lunas and i wanna make it even more cooler, it's been like over 6 months since i started it, so hopefully more cool stuff come in the future
i'm not very knowledgeable with features of syncthing, but it's not exactly similar to syncthing. syncthing works well if you want a daemon working in the background checking for new added files, and then syncing them to remote
lunas doesn't have a daemon, maybe in the future that could be added idk.
idk if syncthing can sync file attributes and handle dereferencing symlink and checking for broken links, but lunas can do that
also lunas is a small 620K cli binary unlike syncthing which is a big 23M gui program
syncthing is more cross-platform than lunas. lunas works on Android tho, but inside Termux