Skip to main content

A concurrent sync tool which works with multiple sources and targets.

Project description

Concurrent Sync

A concurrent sync tool which works similar to rsync. It supports syncing given sources with multiple targets concurrently.

Requirements

Python >= 3.8 is required. (CPython and PyPy are both supported)

Installation

Concurrent Sync can be either installed directly via pip:

pip install concurrent-sync

Or it can be installed from the source:

git clone https://github.com/simsekhalit/concurrent-sync.git
python3 -m pip install ./concurrent-sync

Manual

$ python3 -m csync --help
usage: csync [-h] [--max-memory MAX_MEMORY] [--target TARGET] SOURCE [SOURCE ...] TARGET

A concurrent sync tool which works similar to rsync. It supports syncing given sources with multiple targets concurrently.

positional arguments:
  SOURCE                specify source directories/files
  TARGET                specify target directory

optional arguments:
  -h, --help            show this help message and exit
  --max-memory MAX_MEMORY
                        specify allowed max memory usage as percent
  --target TARGET       specify additional target directories

For more information: https://github.com/simsekhalit/concurrent-sync

Concurrent Sync takes one or more source paths and one or more target paths as arguments. All the given source paths are synced with each given target path concurrently.

  • Only the missing or changed files are copied from source to target.
  • While checking if a file is changed, its modification time and size are used similar to rsync.
  • Trailing slash at the end of the source is interpreted in a similar way to rsync.


Following Examples section clarifies the working mechanics in a more clear way.

Examples

1. One source path and one target path are given

Source

/mnt/Source
/mnt/Source/File1
/mnt/Source/File2
/mnt/Source/Folder1
/mnt/Source/Folder2
/mnt/Source/Folder2/File3

Target

/mnt/Target

Following command is executed:

python3 -m csync /mnt/Source /mnt/Target

After the sync is completed, target becomes:

/mnt/Target
/mnt/Target/Source
/mnt/Target/Source/File1
/mnt/Target/Source/File2
/mnt/Target/Source/Folder1
/mnt/Target/Source/Folder2
/mnt/Target/Source/Folder2/File3

2. Two source paths and one target are given

Source 1

/mnt/Source1
/mnt/Source1/File1
/mnt/Source1/File2

Source 2

/mnt/Source2
/mnt/Source2/File3
/mnt/Source2/File4

Target

/mnt/Target

Following command is executed:

python3 -m csync /mnt/Source1 /mnt/Source2 /mnt/Target

After the sync is completed, target becomes:

/mnt/Target
/mnt/Target/Source1
/mnt/Target/Source1/File1
/mnt/Target/Source1/File2
/mnt/Target/Source2
/mnt/Target/Source2/File3
/mnt/Target/Source2/File4

3. Source with trailing slash and target are given

Source

/mnt/Source
/mnt/Source/File1
/mnt/Source/File2

Target

/mnt/Target

Following command is executed:

python3 -m csync /mnt/Source/ /mnt/Target

After the sync is completed, target becomes:

/mnt/Target
/mnt/Target/File1
/mnt/Target/File2

4. Source and target with common paths

While syncing subdirectories of source paths with target paths, redundant files/folders are removed.

Source

/mnt/Source
/mnt/Source/Folder
/mnt/Source/Folder/File1
/mnt/Source/Folder/File2

Target

/mnt/Target
/mnt/Target/Source
/mnt/Target/Source/Folder
/mnt/Target/Source/Folder/File3

Following command is executed:

python3 -m csync /mnt/Source /mnt/Target

After the sync is completed, target becomes:

/mnt/Target
/mnt/Target/Source
/mnt/Target/Source/Folder
/mnt/Target/Source/Folder/File1
/mnt/Target/Source/Folder/File2

Since File3 is no longer in the source path it's deleted from the target as well.

5. One source path and two target paths are given

Source

/mnt/Source
/mnt/Source/File1
/mnt/Source/File2

Target 1

/mnt/Target1

Target 2

/mnt/Target2

Following command is executed:

python3 -m csync /mnt/Source /mnt/Target1 --target /mnt/Target2

After the sync is completed, targets become:

Target 1

/mnt/Target1
/mnt/Target1/Source
/mnt/Target1/Source/File1
/mnt/Target1/Source/File2

Target 2

/mnt/Target2
/mnt/Target2/Source
/mnt/Target2/Source/File1
/mnt/Target2/Source/File2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

concurrent-sync-1.0.0.tar.gz (9.8 kB view hashes)

Uploaded Source

Built Distribution

concurrent_sync-1.0.0-py3-none-any.whl (9.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page