A simple backup utility for taking a path and recursively backing up the files and zipping them up.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Dylan Legendre d9215285c7 Fix go install by tracking cmd/fullback
The bare `fullback` gitignore rule was excluding the CLI package path,
so the published module had no installable main package.

Co-authored-by: Cursor <[email protected]>
2026-07-29 22:18:26 -05:00
cmd/fullback Fix go install by tracking cmd/fullback 2026-07-29 22:18:26 -05:00
internal initial commit 2026-07-29 22:14:31 -05:00
.gitignore Fix go install by tracking cmd/fullback 2026-07-29 22:18:26 -05:00
go.mod initial commit 2026-07-29 22:14:31 -05:00
go.sum initial commit 2026-07-29 22:14:31 -05:00
LICENSE Initial commit 2026-07-29 22:33:18 +00:00
README.md initial commit 2026-07-29 22:14:31 -05:00

fullback

A simple CLI backup utility that recursively archives a directory into a zip file, with optional incremental (partial) backups tracked via content hashes.

Install

go install git.dylanlegendre.com/MorpheusZero/fullback/cmd/fullback@latest

Or from a clone:

go build -o fullback ./cmd/fullback

Usage

Full backup

Archives every regular file under the given path and records state for later incremental runs:

fullback full /path/to/folder
fullback full /path/to/folder -o /backups/my-backup.zip

Default output name (in the current working directory):

fullback-<basename>-<YYYYMMDD-HHMMSS>.zip

Partial backup

Zips only files that are new or whose SHA-256 changed since the last backup of that same absolute path:

fullback partial /path/to/folder

If nothing changed, no zip is written (nothing to backup). You must run a full backup for that path at least once before partial.

Quiet mode

Suppress progress and informational messages (useful for cron). Errors and per-file warnings still go to stderr:

fullback full /path/to/folder -q
fullback partial /path/to/folder --quiet

State

All backup roots share a single manifest:

~/.fullback/manifest.json

Each absolute backup root is a key under roots, with a map of relative file paths to size, mod time, and SHA-256. Concurrent runs are not locked in v1 and may race if started at the same time.

Behavior notes

  • Progress shows percentage and ETA on a single updating line (default).
  • Symlinks and non-regular files are skipped with a warning.
  • Unreadable files/directories are skipped with a warning; the run continues.
  • The output zip path must not be inside the source tree.
  • The manifest is updated only after a successful zip write (or a confirmed no-op partial).