我正在使用 lftp 将文件从本地传输到仅允许 SFTP 访问的远程服务器。我使用以下语法传输文件:
lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory"
在传输文件时,这一切正常。由于我将其用作嵌入在 .sh 文件中的 cron 并且有时 lftp 失败(原因不明)。
如何使用一些退出代码或可用于确保转移正确性的东西来验证转移?
我认为,您必须将其包装在 shellscript 中。
shellscript 必须生成一个 lftp 脚本,例如:
set xfer:log true
set xfer:log-file "/path/to/somewhere/$DATESTAMP.log"
lcd "/path/of/source"
open -u $UN,$Pass sftp://$Server
mirror -R $Directory
quit
由 执行lftp -f $ScriptName
。
之后,解析生成的日志文件;AFAIK 它只包含成功的转移。
awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /'
以上将生成每个文件传输的文件和字节列表。例如,您可以遍历结果并与实际文件大小进行比较
# WARNING: Script assumes that filename contains no space.
while read fname fsize; do
# The following line used if the lftp runs from e.g. the source folder
actualname=$Prefix/$fname
actualsize=$(stat -c "%s" "$actualname")
if (( actualsize != fsize )); then
# Some error handling code here
fi
done <<< "$(awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /')"
注意:我在那里使用“herestring”而不是管道,以启用while
循环内的变量操作。