验证LFTP传输成功

时间:2012-09-18 15:57:49

标签: transfer verify lftp

我正在使用lftp将文件从本地传输到只允许SFTP访问的远程服务器。 我使用以下语法来传输文件:

lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory"

当涉及到transffering文件时,这一切都很好。 因为我使用它作为嵌入在.sh文件中的cron,有时lftp失败(原因不明)。

如何使用某些退出代码或可用于确保传输正确性的内容验证传输?

1 个答案:

答案 0 :(得分:4)

我认为你必须将它包装在一个shellcript中。

shellcript必须生成一个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循环内操作变量。