Skip to main content

Interactive directory/file transfer with SHA-256 checksum verification over SSH

Project description

verisync — Interactive Directory Transfer with Checksum Verification

PyPI version Python Versions License: MIT

A general-purpose interactive file/directory transfer utility with end-to-end SHA-256 checksum verification over SSH.
Transfer files or directories to a remote server via rsync or tar.gz, then automatically verify every file's integrity — all from a single command.


Table of Contents


Features

  • 📁 File and directory — transfer a single file or an entire directory tree
  • 📦 Batch mode — transfer multiple sources in one run with flexible destination mapping
  • End-to-end SHA-256 verification — a checksum manifest is generated locally and re-verified remotely after transfer
  • ♻️ rsync mode (default) — incremental, resumable, and bandwidth-efficient
  • 🗜️ Zip mode (--zip) — packs each source into a .tar.gz, uploads, and auto-extracts on the remote
  • 🔌 SSH multiplexing — a single SSH control socket is reused across all remote operations, including 2FA/password auth flows
  • 📏 Space checks — remote free disk space is measured before transfer; warns if total exceeds 100 GiB
  • 🖥️ Interactive + CLI — all parameters can be supplied as CLI flags or entered interactively at runtime
  • 🤖 Auto-confirm (-y) — skip prompts for scripted/non-interactive usage
  • 🕒 Elapsed time — reports total transfer and verification duration

Requirements

Requirement Notes
Bash >= 4.0 Required for string manipulations and set -euo pipefail
rsync Used for incremental file transfer in default mode
ssh SSH client with multiplexing (ControlMaster) support
sha256sum Standard coreutils tool, available on all Linux/macOS systems
bc Used for human-readable size arithmetic
tar Only required when using --zip mode

Note: verisync only needs to be installed on the source machine. The remote side requires only sha256sum and standard POSIX shell tools — no remote installation needed.


Installation

Via pip (recommended)

pip install verisync

This places the verisync command on your PATH.

Via pipx (isolated)

pipx install verisync

Manual install

git clone https://github.com/whats2000/verisync.git
cd verisync
bash verisync.sh --help

Usage

verisync [OPTIONS]

Arguments

Flag Description
-s, --src <path> Local source file or directory to transfer (repeat for batch)
-u, --user <user> Remote SSH username
-H, --host <host> Remote SSH hostname or IP address
-d, --dest <path> Remote destination (1 shared dest OR one per --src)
--zip Pack each source into tar.gz before transferring
-y, --yes Auto-confirm all prompts (non-interactive mode)
-h, --help Show usage and exit

Any flag not supplied on the command line will be prompted interactively.

Examples

Interactive mode (prompts for all parameters):

verisync

Fully specified via CLI:

verisync --src /data/project --user alice --host hpc.example.com --dest /scratch/alice/

Batch mode (multiple sources to shared destination):

verisync -s /data/file1.txt -s /data/dir2 -d /remote/shared/ -u alice -H hpc.example.com

Batch mode (1:1 source-to-destination mapping):

verisync -s /local/a -s /local/b -d /remote/x -d /remote/y -u alice -H hpc.example.com

Use zip mode for compressed uploads:

verisync -s /data/project -u alice -H hpc.example.com -d /scratch/alice/ --zip

Non-interactive mode (auto-confirm all prompts):

verisync -s /data/project -u alice -H hpc.example.com -d /scratch/alice/ -y

Transfer Steps

Step Description
1 Collect source(s), destination(s), remote user, and host
2 Measure total local size; warn if > 100 GiB
3 Test SSH connectivity; check remote free disk space for each destination
4 For each source: generate SHA-256 checksum manifest
5 For each source: transfer files + manifest via rsync (or tar.gz)
6 For each source: verify checksums remotely
7 Print batch summary (pass/fail per source)

Modes: rsync vs zip

Feature rsync (default) --zip mode
Resumable? Yes No
Incremental? Yes No
Single archive? No Yes (per source)
Compression -z (inline) gzip (pre-compressed)
Remote extraction Not needed Auto-extracted via tar

Contributing

Bug reports and pull requests are welcome at github.com/whats2000/verisync.


License

MIT — see LICENSE for details.

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

verisync-1.2.1.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

verisync-1.2.1-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file verisync-1.2.1.tar.gz.

File metadata

  • Download URL: verisync-1.2.1.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for verisync-1.2.1.tar.gz
Algorithm Hash digest
SHA256 04a0d8f0ee2009e143ff618691cee3b6275ffb44b90c9a9baffd7952480cef08
MD5 50f073e9b75425cf1685708611745dc9
BLAKE2b-256 a328d32c03684d2e1953b991a66ea7addeba8daf0c36a0e3074a1a0f461ebdef

See more details on using hashes here.

Provenance

The following attestation bundles were made for verisync-1.2.1.tar.gz:

Publisher: publish.yml on whats2000/verisync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file verisync-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: verisync-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for verisync-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 26e1715be9863800964fb62529af50ff7a28faeb9e427dc3b537dbef1d736298
MD5 99a81dbd0a23eee5d8a7ec1be2138104
BLAKE2b-256 61001d7c5750a50a567673e1598ea22bac5be492023908ef4ae179c899ee03e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for verisync-1.2.1-py3-none-any.whl:

Publisher: publish.yml on whats2000/verisync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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