Skip to main content

Fetch'n'Backup - Simple two-step backup tool with rsync

Project description

fnb — Fetch'n'Backup

PyPI version Python 3.12+ License: MIT

fnb is a simple two-step backup tool, powered by rsync. It gives you two handy commands: fetch (to pull from remote), and backup (to save to somewhere safe).

Under the hood? Just good old rsync — no magic, just sharp automation.

  • Simple config. Sharp execution. Safe data.
  • Use them one by one, or sync them all in one go.

🚀 Features

  1. Fetch — Retrieve data from a remote server to your local machine
  2. Backup — Save local data to external storage
  3. Sync — Run Fetch and Backup together in one go
  4. Init — Generate an initial config file (fnb.toml)
  5. Structured Logging — Built-in logging with configurable verbosity levels and file output

⚙️ Installation

From PyPI (Recommended)

pip install fnb
# または
uv pip install fnb

From Source

git clone https://gitlab.com/qumasan/fnb.git
cd fnb
uv sync --all-groups
uv run fnb --help

Requirements: Python 3.12 or higher is required.

See the full Installation Guide for more options, including running from source without installing.


🧰 Quick Start

# Initialize configuration files (fnb.toml and .env files)
fnb init

# Check the current config
fnb status

# Fetch: remote -> local
fnb fetch TARGET_LABEL

# Backup: local -> external
fnb backup TARGET_LABEL

# Run Fetch → Backup in one go
fnb sync TARGET_LABEL

# Check version
fnb version

🔧 Configuration

fnb uses TOML configuration files with sections for fetch and backup operations:

[fetch.SECTION_NAME]
label = "TARGET_LABEL"
summary = "Fetch data from remote server"
host = "user@remote-host"
source = "~/path/to/source/"
target = "./local/backup/path/"
options = ["-auvz", "--delete", '--rsync-path="~/.local/bin/rsync"']
enabled = true

[backup.SECTION_NAME]
label = "TARGET_LABEL"
summary = "Backup data to cloud storage"
host = "none"          # Local operation
source = "./local/backup/path/"  # Output from fetch
target = "./cloud/backup/path/"
options = ["-auvz", "--delete"]
enabled = true

Configuration File Priority (highest to lowest)

  1. ./fnb.toml — Project-local configuration
  2. ~/.config/fnb/config.toml — Global user configuration (XDG standard)
  3. C:\Users\username\AppData\Local\fnb\config.toml — Windows global configuration

📊 Logging

fnb includes built-in structured logging powered by loguru. All CLI commands support --log-level, --verbose (same as --log-level DEBUG), and --quiet (same as --log-level WARNING).

fnb fetch TARGET_LABEL --verbose
fnb backup TARGET_LABEL --quiet
fnb sync TARGET_LABEL --log-level DEBUG

User-facing messages go to stdout; debug/technical logs go to stderr and are also saved to a rotating log file:

  • macOS: ~/Library/Logs/fnb/fnb.log
  • Linux: ~/.local/share/fnb/fnb.log
  • Windows: %APPDATA%\qumasan\fnb\Logs\fnb.log

Set FNB_DISABLE_FILE_LOGGING=1 to disable file logging.


🔐 Authentication

SSH password input can be automated using pexpect. You can also define connection settings (e.g. FNB_PASSWORD_*, FNB_TIMEOUT) in a .env file if needed. Run fnb init env to create the initial .env file.


🪪 License

MIT


🔗 Links

  • 🛠️ Development, Issues, Merge Requests: GitLab — please use GitLab for development contributions, bug reports, and feature requests
  • 🌏 Public Mirror and Discussions: GitHub
  • 📦 PyPI Package: fnb
  • 📖 Documentation: ReadTheDocs — installation, configuration, Contributor Guide, and Maintainer Guide
  • 📝 Release Notes: docs/releases/

See CLAUDE.md for detailed development guidelines (testing, linting, release workflow).

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

fnb-0.15.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

fnb-0.15.0-py3-none-any.whl (35.3 kB view details)

Uploaded Python 3

File details

Details for the file fnb-0.15.0.tar.gz.

File metadata

  • Download URL: fnb-0.15.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fnb-0.15.0.tar.gz
Algorithm Hash digest
SHA256 0eeb6ca9c253686b0f72ed6f535281a87ffcea8c64ac881b90b062d606dc7f85
MD5 6dbb66f17e3818dd3379f2873a0a299e
BLAKE2b-256 b892cd31793281289796fc0494881e07db8733ac65bd47fa6e4ab82d593f884c

See more details on using hashes here.

File details

Details for the file fnb-0.15.0-py3-none-any.whl.

File metadata

  • Download URL: fnb-0.15.0-py3-none-any.whl
  • Upload date:
  • Size: 35.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fnb-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 08c36b39435265b66d85f36d3fea380030f8e290649532d7a7f11f09b6a7814b
MD5 29ac1e7cbf1dcd8536f753be81a7d01e
BLAKE2b-256 79d1c917897ecfb359a1212d66f8a6196792f71df331f5322e12d868fc98f51f

See more details on using hashes here.

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