SFTP递归上传时子目录文件被传至根目录,问题排查求助
SFTP递归上传目录结构异常问题的解决
问题描述
本地Windows目录结构:
- install_k3s.yaml - files - registries.yaml
执行SFTP命令:
put -r *
远程Linux服务器得到异常结构:
- install_k3s.yaml - files - registries.yaml
registries.yaml未被放入files文件夹,手动创建远程files目录后重新执行命令,问题依旧。
原因分析
问题出在Windows环境下SFTP客户端对通配符*的解析逻辑:
Windows的SFTP(比如OpenSSH自带的sftp.exe)会将*展开为当前目录下的所有文件和子目录条目,然后逐个执行递归上传。但处理子目录内的文件时,它不会自动保留父目录层级,而是直接将文件传到远程当前工作目录,同时还会创建一个空的files目录,最终导致结构混乱。
解决办法
方法1:上传本地当前目录而非使用通配符
在SFTP会话中执行:
put -r .
该命令会完整递归上传本地当前目录的所有内容,包括子目录结构,远程服务器会完全复刻本地的目录层级。
方法2:明确指定要上传的条目
分开上传单个文件和子目录,规避通配符的逻辑问题:
put install_k3s.yaml put -r files
这样files目录及其内部的registries.yaml会被完整上传到远程服务器,保留原有结构。
方法3:确保使用最新版SFTP客户端
如果使用的是Windows自带的OpenSSH sftp,更新到最新版本,旧版本可能存在通配符处理的兼容性bug。
内容的提问来源于stack exchange,提问作者PrestonDocks
相关产品推荐
相关产品推荐

