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

KornShell SFTP脚本优化:如何仅获取远程文件列表而非全部输出?

解决KornShell脚本中SFTP输出仅保留文件列表的问题

方法1:SFTP批量模式+输出过滤

通过给SFTP传递批量命令,同时过滤掉连接提示、命令提示符等冗余内容,只保留纯文件名:

#!/usr/bin/ksh
# 配置参数
REMOTE_HOST="你的远程主机地址"
REMOTE_USER="远程用户名"
REMOTE_DIR="/目标远程目录路径"
LOCAL_FILELIST="scotland_filelist.txt"

# 执行SFTP并过滤输出
sftp -b - $REMOTE_USER@$REMOTE_HOST <<EOF | grep -vE "^sftp>|Connected to|Changing directory|^$" > $LOCAL_FILELIST
cd $REMOTE_DIR
ls -1
EOF
  • -b -:让SFTP从标准输入读取批量命令
  • ls -1:强制远程端每行输出一个文件名,避免文件名混排
  • grep -vE:排除SFTP提示符、连接日志、空行等非文件列表内容

方法2:长格式输出+awk精准提取

如果需要排除目录只保留文件,可利用长格式输出的特性,用awk定位文件行:

sftp $REMOTE_USER@$REMOTE_HOST <<EOF | awk '/^-/ {print $NF}' > $LOCAL_FILELIST
cd $REMOTE_DIR
ls -l
EOF
  • ls -l:输出长格式列表,普通文件行以-开头
  • awk '/^-/ {print $NF}':仅匹配普通文件行,提取最后一列(文件名)

方法3:SSH直接执行远程命令(替代SFTP)

如果服务器允许SSH直接执行命令,可跳过SFTP的冗余输出,直接获取文件列表:

ssh $REMOTE_USER@$REMOTE_HOST "ls -1 $REMOTE_DIR" > $LOCAL_FILELIST

这种方式直接通过远程Shell执行ls,输出就是纯文件名列表,无需额外过滤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:02:40