# SyncTool

## Description

This tool synchronizes two remote backends. The tool assumes that the intent is to have the destination match the source.

If the destination has files that are not in the source, they will be deleted (or renamed if the `--retention` option is set).

If the destination has files that are also present in the source, but the files differ in size, or if the source files have a newer (more recent) timestamp, the destination files will be overwritten by the source files. Given that some backends do not allow for metadata or timestamp modification, and that the tool is run after backup, the destination files should always have a timestamp that is newer (or the same if run promptly) compared to the source files.

If the `--force` option is set, the destination will be overwritten by the source, regardless of the state of the files. It will also skip the initial comparison, and delete (or rename) all files in the destination.

If the `--verify` option is set, the files will be downloaded and compared after uploading to ensure that the files are correct. Files that already exist in the destination will be verified before being overwritten (if they seemingly match).

## Usage

```
Duplicati.CommandLine.SyncTool <backend_src> <backend_dst> [options]
```

## Arguments

* `backend_src` : The source backend string.
* `backend_dst` : The destination backend string

## Options

* `--auto-create-folders`: Automatically create folders in the destination backend if they do not exist. Default is `true.`
* `--backend-retries`: Number of times to recreate a backend on backend errors. Default is `3`.
* `--backend-retry-delay`: Delay in milliseconds between backend retries. Default is `1000`.
* `--backend-retry-with-exponential-backoff`: Use exponential backoff for backend retries, multiplying the delay by two for each failure. Default is `true`.
* `-y, --confirm, --yes` : Automatically confirm the operation. Default is `false`.
* `-d, --dry-run` : Do not actually write or delete files. If not set here, the global options will be checked. Default is `false`.
* `--dst-options` : Options for the destination backend. Each option is a key-value pair separated by an equals sign, e.g. `--dst-options key1=value1 key2=value2` . Default is an empty collection of options.
* `-f, --force` : Force the synchronization, overwriting all of the destination files regardless of their state. Default is `false`.
* `--global-options` : Global options all backends. May be overridden by backend specific options (`--src-options`, `--dst-options`). Each option is a key-value pair separated by an equals sign, e.g. `--global-options key1=value1 key2=value2` . Default is an empty collection of options.
* `--log-file` : The log file to write to. If not set here, global options will be checked. Default is an empty collection of options.
* `--log-level` : The log level to use. If not set here, global options will be checked Default is `information`.
* `--parse-arguments-only` : Only try to parse the arguments and then exit. Default is `false`.
* `--progress` : Print progress to STDOUT. Default is `false`.
* `--retention` : Toggles whether to keep old files. Any deletes will be renamed instead. Default is `false`.
* `--retry` : Number of times to retry on errors. Default is `3`.
* `--src-options` : Options for the source backend. Each option is a key-value pair separated by an equals sign, e.g. `--src-options key1=value1 key2=value2` . Default is an empty collection of options.
* `--verify-contents` : Verify the contents of the files to decide whether the pre-existing destination files should be overwritten. Default is `false`.
* `--verify-get-after-put` : Verify the files (by downloading and comparing) after uploading them to ensure that they were uploaded correctly. Default is `false`.
* `--version` : Print the version information and exit.
* `-?, -h, --help` : Show help and usage information.
