copy | diff | parallel | guarded deletes
Mirror S3 buckets with clear transfer decisions.
s3mirror keeps bucket replication direct: one Python script, one YAML or JSON config, and logs that make scheduled S3-compatible copies easy to audit.
What it does
Copy, compare, and clean up without surprises.
List source buckets, skip configured names, and create missing destination buckets before copying.
Compare object keys and byte sizes, then copy new or changed objects with boto3 transfer settings.
Run copy-only validation first, then opt into destination-only object deletion when ready.
Install paths
Get started with your preferred runtime.
Linux containers. Pulls the release image from GitHub Container Registry.
docker pull ghcr.io/netspeedy/s3mirror:latest
docker run --rm \
-v "$PWD/config.yaml:/config/config.yaml:ro" \
ghcr.io/netspeedy/s3mirror:latest \
--config /config/config.yaml --no-deletemacOS and Linux. Tracks stable releases through the Netspeedy tap.
brew tap netspeedy/s3mirror
brew install s3mirrorClone the repository and keep dependencies isolated for scheduled runs.
git clone https://github.com/netspeedy/s3mirror.git
cd s3mirror
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtFetch a tagged source archive directly from GitHub Releases.
curl -L https://github.com/netspeedy/s3mirror/archive/refs/tags/v1.0.3.tar.gz -o s3mirror-v1.0.3.tar.gz