Listed below are three ways to use bzip2 with tar, namely
This method requires no setup at all. To un-tar the bzip2'd tar archive, foo.tar.bz2 in the current directory, do
/path/to/bzip2 -cd foo.tar.bz2 | tar xf -
This works, but can be a PITA to type often.
Thanks to Leonard Jean-Marc for the tip. Thanks also to Alessandro Rubini for differentiating bash from the csh's.
In your .bashrc, you can put in a line like this:
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
In your .tcshrc, or .cshrc, the analogous line looks like this:
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
Apply the patch below to gnu tar 1.12 as follows:
cd tar-1.12/src; patch < /path/to/tar.diff
compile it, and install it, and you're good to go. Make sure that both
tar and bzip2 are in your $PATH by "which tar" and "which bzip2." To use
the new tar, just do
tar xyf foo.tar.bz2
to decompress the file.
To make a new archive, it's similar:
tar cyf foo.tar.bz2 file1 file2 file3...directory1 directory2...
Here is the patch:
*** tar.c Thu Jun 11 00:09:23 1998 --- tar.c.new Thu Jun 11 00:14:24 1998 *************** *** 196,201 **** --- 196,203 ---- {"block-number", no_argument, NULL, 'R'}, {"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR}, {"blocking-factor", required_argument, NULL, 'b'}, + {"bzip2", required_argument, NULL, 'y'}, + {"bunzip2", required_argument, NULL, 'y'}, {"catenate", no_argument, NULL, 'A'}, {"checkpoint", no_argument, _option, 1}, {"compare", no_argument, NULL, 'd'}, *************** *** 372,377 **** --- 374,380 ---- PATTERN at list/extract time, a globbing PATTERN\n\ -o, --old-archive, --portability write a V7 format archive\n\ --posix write a POSIX conformant archive\n\ + -y, --bzip2, --bunzip2 filter the archive through bzip2\n\ -z, --gzip, --ungzip filter the archive through gzip\n\ -Z, --compress, --uncompress filter the archive through compress\n\ --use-compress-program=PROG filter through PROG (must accept -d)\n"), *************** *** 448,454 **** Y per-block gzip compression */ #define OPTION_STRING \ ! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz" static void set_subcommand_option (enum subcommand subcommand) --- 451,457 ---- Y per-block gzip compression */ #define OPTION_STRING \ ! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxyz" static void set_subcommand_option (enum subcommand subcommand) *************** *** 805,810 **** --- 808,817 ---- case 'X': exclude_option = 1; add_exclude_file (optarg); + break; + + case 'y': + set_use_compress_program_option ("bzip2"); break; case 'z':