prefixload

Crates.ioprefixload
lib.rsprefixload
version0.12.3
created_at2025-07-09 19:29:51.180699+00
updated_at2025-10-10 10:35:06.437789+00
descriptionS3 cli backup by file name prefix
homepage
repositoryhttps://github.com/b4rgut/prefixload
max_upload_size
id1745362
size192,945
Aleksey Kalsin (b4rgut)

documentation

README

CI crates.io

🇺🇸 English | 🇷🇺 Русский

Prefixload

Prefixload is a small command-line utility written in Rust that periodically uploads files from a local directory to an Amazon S3 or S3-compatible bucket. It selects files for upload based on configurable filename prefixes.

This tool is useful for automating backups where files are organized and named with consistent prefixes (e.g., db_backup_2025-09-21.sql, logs_myapp_2025-09-21.tar.gz).

Features

  • Prefix-based Rules: Configure rules in a YAML file to map file prefixes to specific remote directories in your S3 bucket.
  • S3-Compatible: Works with AWS S3 as well as other S3-compatible services like MinIO, Ceph, or Wasabi.
  • Efficient Syncing: Uses S3 ETags to check if a file is already synced, avoiding unnecessary re-uploads.
  • Multipart Uploads: Automatically handles large files using multipart uploads.
  • Secure Credential Storage: A login command helps you securely store your AWS credentials.

Installation

You can install Prefixload directly from crates.io using Cargo:

cargo install prefixload

Usage

The tool requires a one-time setup for credentials and configuration.

1. Login

First, configure your AWS credentials. The tool will prompt you for your Access Key ID and Secret Access Key and save them to the standard ~/.aws/credentials file.

prefixload login

2. Configure

Next, set up your backup rules. The configuration is stored in a YAML file. To open it in your default editor, run:

prefixload config edit

This will open the configuration file where you can define your S3 endpoint, bucket, and prefix mapping rules.

3. Run a Backup

To perform a one-time backup based on your configuration, use the run command:

prefixload run

You can run it in quiet mode to suppress output and log to a file instead:

prefixload run --quiet

Configuration

The configuration is located at ~/.config/prefixload/config.yml (on Linux/macOS) or %APPDATA%\prefixload\config.yml (on Windows).

Here is an example of the config.yml file:

# The endpoint URL of your S3-compatible storage
endpoint: "https://s3.example.com"

# The name of your S3 bucket to upload files to
bucket: "my-backup-bucket"

# The AWS region. Required by the SDK.
region: "us-east-1"

# Set to `true` for S3-compatible services that require path-style addressing (e.g., MinIO).
force_path_style: false

# The upload part size in bytes for multipart uploads (e.g., 15MB).
part_size: 15728640

# Path to the local directory where your files are stored.
local_directory_path: "/var/backups"

# Mapping rules for uploading files.
directory_struct:
  # Files starting with "db_backup_" will be uploaded to the "database/" directory in the bucket.
  - local_name_prefix: "db_backup_"
    remote_path: "database/"

  # Files starting with "app_logs_" will be uploaded to the "application_logs/" directory.
  - local_name_prefix: "app_logs_"
    remote_path: "application_logs/"
Commit count: 94

cargo fmt