SSHを介してファイルの完全なリストが存在することを確認し、存在するかどうかを確認します。

SSHを介してファイルの完全なリストが存在することを確認し、存在するかどうかを確認します。

ファイルのリストがあります〜しなければならない確認メールを送信する前に、リモートディレクトリに存在します。たとえば、私のリストは次のとおりですfile_list=example.txt testfile.txt。私はそれぞれをテストする方法を知っています個人のファイルは次のように存在します。

ssh [email protected] "test -e /path/to/file/example.txt"
if [ $? -eq 0 ]; then
    echo -e "Email body" | mail -s "File exists." "[email protected]"
fi

しかし、リスト内の各ファイルをどのようにクリックして確認できますか?すべてのファイルそのリモートディレクトリに存在しますか? 4つのうち3つが正常にプッシュされたとsftp仮定すると、クライアントにすべてのファイルが利用可能であるという電子メールを送信し続けるのではなく、終了し、私のグループにエラーを電子メールで送信して確認するように言う必要があります。ロジックは次のようになります。

ssh [email protected] "test - [$file_list]"
if [they all exist]; then
  successful -- email the client
else
  error -- email your group
  exit
fi

答え1

あなたできる単一のSSH接続のリモート側に配列を設定し、それを繰り返してみてください。ファイルリストが静的でリモート側にシェルスクリプトを配置できる場合は、それを呼び出すのが最も簡単です。それ以外の場合は、配列をローカルに設定して繰り返しSSH経由でテストするたびにファイルが存在することを確認できます。

files=(example.txt testfile.txt)
ok=0
for file in "${files[@]}"
do
  ssh [email protected] test -e "$file" && ((ok++))
done
if [ $ok -eq ${#files[@]} ]
then
  success, all $ok files made it
else
  failure, only $ok files made it
fi

答え2

変数を設定fileし、file1ファイル名を追加します。

file="/path/to/testfile.txt"
file1="/path/to/example.txt"

ssh [email protected]
if [[ -f "$file" && -f "$file1" ]]; then
    echo -e "Email body" | mail -s "File exists." "[email protected]"
else
  echo -e "Email body" | mail -s "File does not exists." "[email protected]"
  exit
fi

-f: ファイルが存在し、通常のファイルの場合は true を返します。

関連情報