Package: concurrent-sync
Concurrent SyncA concurrent sync tool which works similar torsync. It supports syncing given sources with multiple targets
concurrently.RequirementsPython >= 3.8 is required. (CPython and PyPy are both supported)InstallationConcurrent Sync can be either installed directly via pip:pipinstallconcurrent-syncOr it can be installed from the source:gitclonehttps://github.com/simsekhalit/concurrent-sync.git
python3-mpipinstall./concurrent-syncManual$ 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-syncConcurrent 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 torsync.Trailing slash at the end of the source is interpreted in a similar way torsync.FollowingExamplessection clarifies the working mechanics in a more clear way.Examples1. One source path and one target path are givenSource/mnt/Source
/mnt/Source/File1
/mnt/Source/File2
/mnt/Source/Folder1
/mnt/Source/Folder2
/mnt/Source/Folder2/File3Target/mnt/TargetFollowing command is executed:python3-mcsync/mnt/Source/mnt/TargetAfter 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/File32. Two source paths and one target are givenSource 1/mnt/Source1
/mnt/Source1/File1
/mnt/Source1/File2Source 2/mnt/Source2
/mnt/Source2/File3
/mnt/Source2/File4Target/mnt/TargetFollowing command is executed:python3-mcsync/mnt/Source1/mnt/Source2/mnt/TargetAfter 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/File43. Source with trailing slash and target are givenSource/mnt/Source
/mnt/Source/File1
/mnt/Source/File2Target/mnt/TargetFollowing command is executed:python3-mcsync/mnt/Source//mnt/TargetAfter the sync is completed, target becomes:/mnt/Target
/mnt/Target/File1
/mnt/Target/File24. Source and target with common pathsWhile 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/File2Target/mnt/Target
/mnt/Target/Source
/mnt/Target/Source/Folder
/mnt/Target/Source/Folder/File3Following command is executed:python3-mcsync/mnt/Source/mnt/TargetAfter the sync is completed, target becomes:/mnt/Target
/mnt/Target/Source
/mnt/Target/Source/Folder
/mnt/Target/Source/Folder/File1
/mnt/Target/Source/Folder/File2SinceFile3is no longer in the source path it's deleted from the target as well.5. One source path and two target paths are givenSource/mnt/Source
/mnt/Source/File1
/mnt/Source/File2Target 1/mnt/Target1Target 2/mnt/Target2Following command is executed:python3-mcsync/mnt/Source/mnt/Target1--target/mnt/Target2After the sync is completed, targets become:Target 1/mnt/Target1
/mnt/Target1/Source
/mnt/Target1/Source/File1
/mnt/Target1/Source/File2Target 2/mnt/Target2
/mnt/Target2/Source
/mnt/Target2/Source/File1
/mnt/Target2/Source/File2