romanzolotarev.com: support and follow me on Twitter

This minimalist script depends only on programs from OpenBSD base. To encrypt your files use bioctl(8) with CRYPTO, openssl(1), or scrypt.

If you are looking for a deduplicating archiver, try borg(1).

Tested on OpenBSD 6.3

Archive with mtree(8) and pax(1)

arc is an archiver with compression. It creates a spec of the original file tree with mtree(8), then creates a compressed archive with pax(1) and gzip(1).

Install

$ ftp -Vo ~/bin/arc https://www.romanzolotarev.com/bin/arc
arc          100% |********************| 18711       00:00
$ chmod +x ~/bin/arc

Create an archive

$ arc ~/src /tmp/archive
/home/romanzolotarev/src 24080K /tmp/archive 16752K OKAY
$ ls -1 /tmp/archive*
/tmp/archive
/tmp/archive.tree.gz
/tmp/archive.tree.sha256
$

Extract a file

Restore one file from the archive and compare its contents with the original.

$ cd /tmp
$ pax -pe -rzf /tmp/archive ./www/arc.md
$ diff ~/src/www/arc.md ./www/arc.md
$

Extract all files

arc_extract restores whole archive into current directory and compares restored files with the spec created by mtree(8).

Note: time of original files in spec is in nanoseconds, while pax(1) restores time in seconds. Therefore, we use sed to cut nanoseconds.

$ mkdir -p /tmp/restored && cd /tmp/restored
$ arc_extract archive
$

or just do the same manually:

$ mkdir -p /tmp/restored && cd /tmp/restored
$ pax -pe -rzf /tmp/archive
$ gunzip < /tmp/archive.tree.gz > /tmp/archive.tree
$ sha256 < tree; cat /tmp/archive.tree.sha256
a4bc68...
a4bc68...
$ sed 's/time=\([0-9]*\)\.[0-9]*/time=\1.0/' /tmp/archive.tree|mtree
$