業務である本番サーバーと検証サーバーの一部ファイルについて、差分を洗い出す必要があり、
合計60ファイル以上もあるので、一個ずつ見て行くのは流石に怠い!
なので、ちょっとしたバッチを書いて洗い出すことにしました。
普通に下記のようにwhile文で書いたら、なぜか一行目のファイルしか読まない!
#/bin/bash listfile=$1 remote=$3 cat ${listfile} | while read line do diff $line <(ssh ${remote} cat $line) >> $2 done
何故だ!!!
色々調べた結果、SSH接続後にreadを行ったうえでループを抜けることが判明!
じゃあ、while文を諦めてforでSSH接続する前に全部読み取ろう
#/bin/bash listfile=$1 remote=$3 for line in `cat ${listfile}` do diff $line <(ssh ${remote} cat $line) >> $2 done
うまくいきましたね!
よし!次はローカルとリモートサーバーのファイル存在確認も足そう
ローカルのファイル存在確認
if [ -e 絶対パス ]; then #ファイルあり else #ファイルなし fi
リモートサーバーのファイル存在確認
if [ `ssh リモートサーバー test -e 絶対パス; echo \$?` = "0" ]; then #ファイルあり else #ファイルなし fi
そして、完成版はこちら↓
#/bin/bash #第1引数:差分ファイルリストパス #第2引数:差分結果出力ファイル #第3引数:リモートサーバー listfile=$1 remote=$3 for line in `cat ${listfile}` do echo "-------------------------------------------------------------------------------------------------------------------------" >> $2 echo "対象ファイル:"$line >> $2 if [ -e $line ]; then if [ `ssh ${remote} test -e $line; echo \$?` = "0" ]; then diff $line <(ssh ${remote} cat $line) >> $2 else echo ${remote}"に該当ファイルが存在しません" >> $2 fi else echo $HOSTNAME"に該当ファイルが存在しません" >> $2 fi done