| 1234567891011121314151617181920212223242526272829303132333435363738394041 | #! /bin/sh# Usage: tarcat volume1 volume2 ...# concatenates a GNU tar multi-volume archive into a single tar archive.# Author: Bruno Haible <bruno@clisp.org>, Sergey Poznyakoff <gray@gnu.org.ua># dump_type FILE [N]# Print type character from block N (default 0) of tar archive FILEdump_type() {  dd if="$1" skip=${2:-0} bs=512 count=1 2>/dev/null |    tr '\0' ' ' |    cut -c157}case `dump_type "$1"` in  [gx]) PAX=1;;esaccat "$1"shiftfor fdo  SKIP=0  T=`dump_type "$f"`  if [ -n "$PAX" ]; then    if [ "$T" = "g" ]; then      # Global extended header.... 2 blocks      # Extended header........... 2 blocks      # Ustar header.............. 1 block      # FIXME: This calculation is will fail for very long file names.      SKIP=5    fi  else    if [ "$T" = "V" ]; then      T=`dump_type "$f" 1`    fi    if [ "$T" = "M" ]; then      SKIP=$(($SKIP + 1))    fi  fi  dd skip=$SKIP if="$f"done
 |