新旧のファイルをアーカイブ
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