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

如何使用SFTP的ls命令列出指定文件夹下的所有子目录

问题根因

你当前遇到的单目录无返回问题,是ls命令的默认行为导致的:当ls的参数只有1个目录时,会默认输出该目录下的内容,而非目录本身的路径;当参数为多个目录时,会先打印每个目录的路径再输出内部内容,所以多目录场景下你可以正常拿到结果。
另外你当前用双引号包裹sftp执行的命令,会导致本地shell提前解析通配符*,如果本地存在和远程同名的路径,还会出现匹配结果异常的问题。

解决方案

方案1(推荐,命令更简洁)

给ls加上-d参数,强制输出目录本身而非内部内容,同时改用单引号包裹命令避免本地通配符解析:

echo 'ls -1d /path/to/folder/*/' | sftp -i /path/to/key user@host | grep -v 'sftp>'

如果要过滤掉异常报错行,只保留有效路径,可以再加一层匹配:

echo 'ls -1d /path/to/folder/*/' | sftp -i /path/to/key user@host | grep -v 'sftp>' | grep '^/'

方案2(兼容性更好,适配不支持ls -d参数的sftp服务端)

先进入目标目录,通过ls -l的输出筛选目录类型的行,再拼接出完整目录路径:

echo 'cd /path/to/folder
ls -l' | sftp -i /path/to/key user@host | awk '/^d/ {print "/path/to/folder/"$9"/"}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:00