rsync helper with presets
Go to file
matthias@arch ca20881999 1.3
2023-10-26 18:15:57 +02:00
_msynk.compdef.zsh add --relative 2023-10-26 18:15:40 +02:00
LICENSE Initial commit 2022-03-11 21:07:38 +01:00
msynk.1.man Added --exclude 2022-04-08 01:56:55 +02:00
msynk.1.md Added --exclude 2022-04-08 01:56:55 +02:00
msynk.sh Add MSYNK_CONFIG_HOME, show delete list again 2023-06-06 17:30:35 +02:00
PKGBUILD 1.3 2023-10-26 18:15:57 +02:00
readme.md 1.3 2023-10-26 18:15:57 +02:00
template Added config template 2022-03-13 15:01:30 +01:00

msynk - rsync helper that supports encryption and presets

Description

msynk uses rsync to synchronise files or directories locally or between devices. In general, you should always add a trailing '/' to directories.

Encryption

Files can also be encrypted or decrypted using mkrypt. If encryption is used, the files are encrypted to a temporary directory and then synced with rsync. If you sync encrypted files to your system, the encrypted files are transferred with rsync to a temporary directory and then decrypted to your filesystem.

Configuration Files

msynk can read from config files usually stored in ~/.config/msynk. The config files are shellscripts run with bash to set certain environent variables. These are:

  • paths: array containing all paths (relative to sender) that should be synced
  • sender: the parent directory of the paths
  • receiver: the path where the files should be synced to
  • rsync_flags: array containing all the flags for rsync. If you just want to add a flag, use rsync_flags+=(-yourflag)
  • use_encryption: 0 for no, 1 for yes A template config file is stored in /usr/share/msynk. You can change the location of the configuration directory by replacing $CONFIG_DIR with your directory in /usr/bin/msynk

Example

To sync the directories "/home/user/foo" "/home/user/bar" and the file "/home/user/file.txt" to a remote server "user@foobar.com:~/backup" which is available with ssh at port 42, you could have a configuration file "my_backup":

    sender=/home/user/
    receiver=user@foobar.com:~/backup/
    paths=(foo/ bar/ file.txt)
    rsync_flags+=(--rsh="ssh -p 42")

You can then run this with: msynk -c my_backup, or if you only want to sync the "foo" directory and ".txt" files: msynk -c my_backup foo .txt

Options

  • -h, --help Show a list of arguments.
  • --settings Show the current settings.
  • -c, --config config-name Retrieve settings from config file ~/.config/msynk/config-name
  • --show-config config-name Print variables defined from a config with config-name.
  • -s, --sender path Set sender to directory. This can also be a remote, like user@domain.com:/dir. Defaults to to the current working directory.
  • -r, --receiver path Set the receiver directory. All files and directories will be placed inside this directory. This can also be a remote, like user@domain.com:/dir. This option always needs to be set. Note that this directory must already exist if it is on a remote.
  • --reverse Swaps sender and receiver. Useful when you want to reverse a config file.
  • -R, --relative Use relative path names, uses rsync --relative option instead of --recursive
  • --encrypt Encrypt files with mkrypt before sending them to the receiver. The files are encrypted to $TMP_DIR and then synced to the receiver. Does not work with --delete.
  • --decrypt Decrypt files with mkrypt after receiving them from the sender. Assumes that all files are encrypted and fails if that is not the case. The files are synced to $TMP_DIR and then decrypted to the receiver directory. Does not work with --delete.
  • --check-date Can be used with -c and --encrypt or --decrypt: When running msynk with a config, the current date is stored in the config file. When running with --check-date, only files that have been modified after the date stored in the config file are processed (by passing--date [date the config was last run] to mkrypt).
  • --mkrypt-flag arg Additional argument for mkrypt, for example to set the key for the encryption. Only pass one argument at a time, so for passing two use --mkrypt-flag "arg1" --mkrypt-flag "arg2"
  • -d, --delete rsync --delete option. Deletes all files on the receiver that do not exist on the sender. msynk will open less with a list of all files that will be deleted and prompt you wether you want continue (unless --skip-dryrun is set)
  • --skip-dryrun Can be used with --delete. This skips listing the files that will be deleted and the prompt.
  • --rsync-flag arg Additional argument for rsync, for example to set the port for the connection. Only pass one argument at a time, so for passing two use --rsync-flag "arg1" --rsync-flag "arg2"
  • -v, --verbose Increase verbosity: Passes -v to rsync and mkrypt.
  • --silent Decrease verbosity: Print only error messages and passes --silent to mkrypt.
  • --debug Maximum verbosity: -v but also print out rsync and mkrypt commands.
  • --exclude Interpret positional arguments as blacklist, not as whitelist.
  • positional arguments If you are using a config file: pos. args. are strings that have to be contained in a path in order for it to be synced. If no pos. args. are given, all files are synced. If you are not using a config file: pos. args. are filepaths relative to the sender directory.

Troubleshooting

Not enough space when using encryption

When using --encrypt, the data is encrypted to a temporary directory $TMP_DIR, when using --decrypt the encrypted date is copied to the $TMP_DIR and then decrypted. The $TMP_DIR defaults to /tmp/mksynk and /tmp is usually limited to half the size of your memory. You change the $TMP_DIR in the script in /usr/bin/msynk or temporarily increase the size of the tmpfs by running sudo mount -o remount,size=XXG,noatime /tmp if your $TMP_DIR is on /tmp and you have at least XXGB memory+swap space.

Changelog

1.3

  • Added relative path support

1.2

Bugfixes:

  • rsync_flags are now applied to dryrun
  • disk usage is correctly obtained for paths with numbers in them

1.1

  • Added --exclude

Copyright © 2022 Matthias Quintern. License GPLv3+: GNU GPL version 3 https://gnu.org/licenses/gpl.html.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.