リモート先のファイルがあるないかを確認する

2021-06-28

SSHコマンドで違うサーバーのファイルを確認する

リモート先のサーバに特定のファイルがあるかどうか確認する必要があったので、その方法を調べてみました。
SSHでリモート先でlsコマンドを叩きます、その結果を変数に代入します。ファイルが有ればファイルのパスが変数が入ってますので、ファイルがパスと確認するファイルのパスが同じかどうかで比較します。またファイルが無いと変数に空白が挿入されるので空白チェックもいれます

lsコマンドで「ls: cannot access hoge.txt: No such file or directory」エラー表示の場合はコンソールに結果を表示させないように「ls [PATH] 2>/dev/null」のようにしてエラーは表示させていません

CHKFILE=/var/tmp/test

FILECHK=`ssh -l admin 192.168.0.11 "ls $CHKFILE 2>/dev/null"`
if [ -n "$FILECHK" ] && [ $FILECHK = "$CHKFILE" ] ; then
  echo "$FILECHKはあります"
else
  echo "$FILECHKはありません"
fi

SSHコマンドで違うサーバーのファイルのタイムスタンプを取得する

先程、リモート先のファイルの有無を確認しましたが、その応用でタイムスタンプを取得してファイルが有れば○分以上なら処理を分けるって処理が必要なケースがありましたので、リモート先のファイルのタイムスタンプを取得方法を説明します。
基本的には先程と同様ですが、タイムスタンプを取得するオプションを付けてから、awkコマンドで必要な値のみを取得します。また下記のではUNIXTIME(エポック秒)も取得しているのでその場合は「–time-style=’+%s’」のオプションを使用しています

# 通常だと空白が入るのでタイムスタンプのスタイルを設定して取得しています。
$ ssh -l admin 192.168.0.11 ls -l --time-style='+%Y-%m-%d' /vat/tmp/test | awk '{print $6}'
2017-10-16

# UNIXタイム(エポック秒)で取得しています
$ ssh -l admin 192.168.0.11 ls -l --time-style='+%s' /vat/tmp/test | awk '{print $6}'
1508120735

 

LinuxCentOS 5,CentOS 6,CentOS 7

Posted by admin