Plain-text archives: tar evolved
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jordan Vaughan 704dc274e4 Merge pull request #12 from scharlatan/master 7 years ago
AUTHORS Create an AUTHORS file and credit czarkoff for his recent additions. 9 years ago
COPYING Initial commit 9 years ago Specify the standard ptar extension in 9 years ago
Makefile Remove Werror from the build flags. 7 years ago Create an AUTHORS file and credit czarkoff for his recent additions. 9 years ago Create an AUTHORS file and credit czarkoff for his recent additions. 9 years ago
ptar.c Changed parameters to is*(3) functions to unsigned char. 8 years ago

Title: Plain Text Archives (ptar) README
Author: Jordan Vaughan
Date: 2013-09-24
Encoding: utf-8
Format: Markdown with MultiMarkdown metadata extensions
Copyright: Written in 2013 by Jordan Vaughan. To the extent possible under law, Jordan Vaughan has waived all copyright and related or neighboring rights to this publication. You can copy, modify, distribute and perform this publication, even for commercial purposes, all without asking permission. Please see for more information.


This is a tool that creates, examines, and extracts files from plain text archives that are simliar to traditional tar(1) archives but are more human-readable.

“Why did you make this?”

I wanted to try to make a simple yet extensible file archive format using only plain text. Thanks to its ubiquity and entrenchment in computing, plain text files are the best long-term digital archival format. The most widely used UNIX archive format is tar(1)’s, so I tried to make something equivalent to tar(1) but with plain text metadata. Plain text archives (ptars) offer nearly equivalent functionality (and sometimes space savings) but with the promise of better longevity.

“Isn’t tar(1) good enough?”

Yes, it is. But using ptar will increase your data’s longevity (archival quality) because the metadata is easier to examine and interpret.

“Why did you reinvent the wheel?”

Because I wanted to. Seriously, though, ptar adds value: metadata that can be easily grokked in a plain text editor.


Get the source. Open a terminal and navigate to the directory containing the source. Run make to build ptar, like so:

% make

ptar will be built in the directory containing the source code. To install it, run

% make install

ptar will be installed in /usr/bin and its owner and group will be root by default. To change the installation directory, set the BINDIR make variable. You can change ptar’s owner and group via INSTALL_USER and INSTALL_GROUP make variables. For example,

% make BINDIR=$HOME/bin INSTALL_USER=yourstruly INSTALL_GROUP=yourstruly install

installs ptar in $HOME/bin. Its owner and group will both be yourstruly.

Alternatively, there’s a simpler installation script,, for systems lacking make(1). To run it, execute this:


where DESTDIR is the directory where the programs will be installed. You need to define the CC environment variable as the name or path of your system’s C compiler. For example, if your system uses GCC, then you could do this:

% CC=gcc ./ DESTDIR

You’ll have to manually set the ptar installed binary’s username and group if you use


After installation, invoke ptar with the -help option for a detailed help message, like so:

% ptar --help

Archive Format

See for a detailed description of the ptar format and examples. Consider including this file in your ptars so that people examining them will have a guide to understanding them (thus increasing your ptars’ long-term archival value).

ptar vs. tar(1)


  • ptar metadata is readable with any plain text editor and is easy for those versed in UNIX lingo to understand; tar(1) metadata is not. This is ptar’s greatest strength.
  • ptar metadata values are theoretically unbounded, whereas tar(1) metadata is limited in most cases.
  • ptar preserves modification times by default, whereas many tar(1) implementations don’t.
  • The ptar command has fewer options than some implementations of tar(1), such as GNU tar. However, the most commmon operations are available: create, list, and extract.


Although ptars require additional space per piece of metadata to store key names (tars don’t tag metadata with key names), each tar entry’s metadata must occupy a multiple of 512 bytes. Therefore, some ptars will use less space than their equivalent tars. However, the reverse is true: Some tars will use less space than their equivalent ptars. They seem to be about the same on average. They compress almost equally well.


ptar runs a little slower than most implementations of tar(1) because it has to do text processing for metadata. However, the slowdown isn’t tremendous. Try it for yourself.

Copyright Notice

Copyright? Hah! Here’s my “copyright”:

This program was written in 2013. See AUTHORS for a list of authors.

To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.

You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see

See COPYING for the CC0 Public Domain Dedication text.