You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将lftp执行du命令的结果存储到shell脚本变量中

lftp脚本获取FTP服务器du执行结果并存入变量的解决方案

错误原因

你原来的写法存在两个核心问题:

  • 写在<< EOF块内的$(du)会被本地Shell提前执行,拿到的是你本机的du结果,不是FTP服务器上的执行结果
  • 你将Shell变量赋值语句写在了lftp的交互输入块中,lftp本身不识别FOO="xxx"这类Shell语法,因此触发Unknown command报错

正确写法

将整个lftp命令的执行输出捕获到Shell变量中,再对结果做过滤提取即可,参考脚本如下:

#!/bin/bash

FTP_PASS=password
FTP_HOST=IP
FTP_USER=username

# 捕获lftp执行du的全量输出
FTP_DU_RESULT=$(lftp << EOF
open ${FTP_USER}:${FTP_PASS}@${FTP_HOST}
du
quit
EOF
)

# 提取根目录总已用空间数值,即du结果中第二列为`.`的行的第一个字段
USED_SPACE=$(echo "$FTP_DU_RESULT" | awk '$2 == "." {print $1}')

echo $USED_SPACE

逻辑说明

  • 用$()包裹整个lftp命令,会把lftp执行过程中所有标准输出内容存入变量,不会把赋值语句传递给lftp解析
  • 用awk过滤结果时,匹配路径为.的行(即FTP根目录的总大小统计行),直接取出第一列的数值就是你需要的结果

内容的提问来源于stack exchange,提问作者BoomRamada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:45:05