我有一个文件列表必须在我发送确认电子邮件之前存在于远程目录中。例如,我的列表是: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
设置变量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
:如果文件存在并且是常规文件,则返回真值。