From superuser.com: TAR vs CPIO, what is the difference?
History
In the "old days", cpio (with option -c
used) was
the tool to use when it came to move files to other UNIX
derivates since it was more portable and flexible than
tar. But the tar portabilityissues may be considered as
solved since the late 1980s.
Unfortunately it was about that time that different vendors
mangled up the -c
format of cpio (just look at the
manual page for GNU cpio and the option -H
). At that
time tar became more portable than cpio ... It took
almost a whole decade until the different UNIX vendors have
sorted that out. Having GNU tar and GNU cpio installed
was a must for all admins which had to deal with tapes from
different sources back then (even nowadays I presume).
User Interface
tar may use a tape configuration file where the administrator would configure the tape drives connected to the system. The user would then just say "Well I'll take tape drive 1" instead of having to remember the exact device node for the tape (which could be very confusing and are also not standarized across different UNIX platforms.
But the main difference is:
tar is able to search directories on its own and takes the list of files or directories to be backed up from command line arguments.
cpio archives only the files or directories it is told to, but does not search subdirectories recursively on it's own. Also cpio gets the list of items to be archived from stdin - this is why it is almost always used in combination with find.
A cpio command often looks frightening to the beginner if compared with tar:
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz $ tar czvf myfiles.tar.gz myfiles
I think that's the main reason why most people use tar to create archive files: For simple tasks like bundling a complete directory its just easier to use.
Also GNU tar offers the option -z
which causes the
archive to be compressed with GNU zip on the fly, making
things even more easier.
On the other hand one may do nifty things with find &
cpio. In fact it's a more UNIX-like approach: Why include
directory tree search into cpio if there's already a tool
that takes care of almost all one can think of: find.
Things that come to mind are only backing up files newer
than a certain date, restricting the files to those residing
in the same filesystem or filtering the find-output with
grep -v
to exclude certain files...
The people of GNU tar spent a lot of work to include a lot of those things that were previously only possible with cpio. In fact both tools learned from each other - but only cpio may read the format of tar - not the other way around.
tar*_ and output processing**
GNU tar offers the option --to-command
to specify a
postprocessor command - although I'd still prefer the pipe.
Maybe it's of use when writing to certain hardware devices.