一个新 SFTP Client crate
现有 Rust SFTP Client 要么依赖 OpenSSL,要么是对
因此我 fork 了
• 支持包含无效 UTF-8 的路径:虽然 SFTP 协议规定路径是 UTF-8,但 Linux 文件名本身就允许无效 UTF-8,主流 SFTP Server 也都支持,这也是主要 fork 的动机,解决了 https://github.com/AspectUnk/russh-sftp/issues/42
• 支持获取文件的 nlink、用户名、组名属性
• 泛型返回值参数,更 idiomatic,如:
• 更少的依赖
• 性能优化
• 所有 Packets 都支持 Copy-on-write,避免不必要内存分配
• Packet 长度预先计算,避免二次分配
•
打算先在 Yazi 上测试一段时间,等稳定了发到 crates.io 回报社区,源码在 https://github.com/sxyazi/yazi/tree/main/yazi-sftp
现有 Rust SFTP Client 要么依赖 OpenSSL,要么是对
ssh 或 sftp 二进制的 Command 包装;前者会加大构建难度,后者存在跨平台问题。因此我 fork 了
russh-sftp 做了个新的 yazi-sftp,虽然是 fork,但重写了 9 成以上的代码:• 支持包含无效 UTF-8 的路径:虽然 SFTP 协议规定路径是 UTF-8,但 Linux 文件名本身就允许无效 UTF-8,主流 SFTP Server 也都支持,这也是主要 fork 的动机,解决了 https://github.com/AspectUnk/russh-sftp/issues/42
• 支持获取文件的 nlink、用户名、组名属性
• 泛型返回值参数,更 idiomatic,如:
let attrs: responses::Attrs = session.send(requests::Stat::new(path)).await?
• 更少的依赖
• 性能优化
• 所有 Packets 都支持 Copy-on-write,避免不必要内存分配
• Packet 长度预先计算,避免二次分配
•
AsyncRead、AsyncWrite trait 实现避免克隆 buffer打算先在 Yazi 上测试一段时间,等稳定了发到 crates.io 回报社区,源码在 https://github.com/sxyazi/yazi/tree/main/yazi-sftp