通过 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

但是我怎样才能点击列表中的每个文件并确认全部文件存在于该远程目录中吗?假设四分之三已通过 成功推送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 连接的远程端设置一个数组并循环遍历它;如果文件列表是静态的并且您可以在远程端放置 shell 脚本,则调用它可能是最简单的。否则,您可以在本地设置数组并循环遍历它,每次都通过 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

设置变量filefile1添加文件名。

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:如果文件存在并且是常规文件,则返回真值。

相关内容