Warning: Trying to access array offset on value of type bool in /home/r1029599/public_html/engineer-log.net/wp-content/themes/simplicity2/lib/customizer.php on line 5404

ローカルとリモートサーバーのファイル差分確認用バッチ作成記

業務である本番サーバーと検証サーバーの一部ファイルについて、差分を洗い出す必要があり、
合計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

– PR –
– PR –