新旧のファイルをアーカイブ

ClearCaseを使った開発で、新旧のファイルを抽出してWindows上で比較したい。
そのために、Viewから古いファイルを取り出す部分で苦労してスクリプトを作成。特にパス+ファイル名からパスだけを抜き出す部分の後方一致で苦労。
bashにはこんな技があったんだね。${xxxx%yyyy}

#!/bin/bash
if [ -z $1 ]
then
  echo Input the user_name and view_name.
else
  if [ -f diffFiles.tar.gz ]
  then
    rm diffFiles.tar.gz
  fi

  if [ -f modfiles.tar ]
  then
    rm modfiles.tar
  fi
  if [ -f orginalfiles.tar ]
  then
    rm orginalfiles.tar
  fi
  if [ -d /tmp/${view}ORG ]
  then
    rm -fr /tmp/${view}ORG
  fi
  mkdir /tmp/${view}ORG

  uname=$1
  view=$2
## ClearCaseからCheckoutしたファイルを抽出
  view_files=$(/opt/rational/clearcase/bin/cleartool ls -r |grep "main\/${view}"| awk 'BEGIN{FS="@@" }{ print $1 }')
  #各ファイルの操作
 #修正後のファイルをtarする。
  for F in ${view_files}
  do
    fname=$(echo $F | sed -e 's/\.\///') > /dev/null  # 先頭の./を外す
    tar -rf modfiles.tar ${fname} 2> /dev/null
  done

 #修正前のファイルをViewで取り出して、一時ファイルにしてtarする。
  for F in ${view_files}
  do
    ff=${F%\/*}   #後方一致で/以降を削除。pathだけにする。
    if ( ! grep "\.\/" ${ff} > /dev/null) # 先頭に./がある->ファイルじゃなくてディレクトリ
    then
       if [ ! -d /tmp/${view}ORG/${ff} ]         #ディレクトリが無ければ作成
       then
         mkdir -p /tmp/${view}ORG/$(echo ${ff} | sed -e 's/\.\///')
       fi
    fi

    fname=$(echo $F | sed -e 's/\.\///') > /dev/null  # 先頭の./を外す
    cat ${fname}@@/main/${view}/0 > /tmp/${view}ORG/${fname}   # 一時ファイルを作成
    # 作業用ディレクトリをアーカイブ
    tar -rf orginalfiles.tar /tmp/${view}ORG/${fname} 2> /dev/null
  done

  tar -zcf diffFiles.tar.gz modfiles.tar orginalfiles.tar
fi