【问题标题】:Verify LFTP transfer success验证 LFTP 传输成功
【发布时间】:2012-09-18 15:57:48
【问题描述】:

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

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

这在传输文件时一切正常。 由于我将其用作嵌入在 .sh 文件中的 cron 并且有时 lftp 失败(原因不明)。

如何使用一些退出代码或可用于确保转移正确性的东西来验证转移?

【问题讨论】:

  • 有人吗?任何的想法?此传输仍然间歇性失败,日志中没有任何内容。

标签: transfer verify lftp


【解决方案1】:

我认为你必须将它包装在一个 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 循环中启用变量操作。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多