tarn.

Incremental directory snapshots

tarn takes point-in-time snapshots of a local directory. Unchanged files are hard-linked to the previous snapshot, so a hundred snapshots of a mostly-static tree cost barely more disk than one.

$ tarn snap ~/work /mnt/backup/work
scanning  ~/work
  4812 files, 1.9 GiB
linked    4737 unchanged
copied    75 changed (14.2 MiB)
snapshot  2026-07-30T09-14-02  (14.2 MiB new)

Why hard links

Each snapshot is a plain directory you can browse, copy or delete with ordinary tools. There is no archive format, no database and no daemon. Restoring a file means copying it back out with cp.

Deleting an old snapshot frees only the data unique to it. The remaining snapshots stay complete, because the kernel keeps the inode alive until the last link to it is gone.

Install

Builds to a single static binary with no runtime dependencies:

$ tar xzf tarn-0.7.2.tar.gz && cd tarn-0.7.2
$ make
$ sudo make install PREFIX=/usr/local
Requires a filesystem with hard-link support for the destination. ext4, xfs, btrfs and zfs are fine; exFAT and most SMB shares are not.

At a glance

Snapshot costOnly changed files consume new space
FormatPlain directories — no proprietary container
RestoreAny file manager, cp, rsync
RetentionConfigurable daily / weekly / monthly pruning
PlatformsLinux, FreeBSD, macOS

Read the documentation for the full command reference and retention rules.