首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证LFTP传输成功

验证LFTP传输成功
EN

Stack Overflow用户
提问于 2012-09-18 15:57:48
回答 1查看 14.1K关注 0票数 6

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

代码语言:javascript
复制
lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory"

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

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

EN

回答 1

Stack Overflow用户

发布于 2013-01-10 08:53:50

我想,你得把它包在一个贝类脚本里。

外壳脚本必须生成一个lftp脚本,例如:

代码语言:javascript
复制
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它只包含成功的传输。

代码语言:javascript
复制
awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /'

上面的内容将为每个文件生成一个文件和字节列表。您可以循环查看结果并与实际文件大小进行比较,例如

代码语言:javascript
复制
# 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]+-/ /')"

注意:--我使用的是“这里的字符串”,而不是管道,以便在while循环中对变量进行操作。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12480695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档