在Windows上使用ssh2 SCP整个目录

时间:2019-04-27 13:54:30

标签: recursion ssh rust sftp

我正在尝试使用Windows上的ssh 3.0版将整个文件夹复制/下载到本地计算机。由于在Windows 10上无法使用ssh2::Session::scp_recv,因此我找到了另一种下载方式。但是,这需要知道将要下载的每个文件的路径。在这种情况下,有必要从某个目录中下载所有PDF,而其中的子目录数量未知。

1。 如上所述,我正在运行Windows 10,不幸的是,该应用程序也需要在其他Windows 10系统上运行。

2。 为了确定任何PDF的路径,我尝试使用递归函数build_paths

fn build_paths(sess: &ssh2::Session, remotedir: &str) {
    let sftp_conn = sess.sftp().expect("Failed to create SFTP Handle!");
    let dir = sftp_conn
        .readdir(Path::new(remotedir))
        .expect("Failed to open remote path!");

    for f in dir {
        let (ff, stats) = f;
        let p = Path::new(&ff);

        if p.extension() == Some(OsStr::new("pdf")) {
            println!("File found!");
        }
        else {
            let d = sftp_conn.readdir(p); // start directory

            for subdir in d.unwrap() {
                println!("{:#?}", subdir);
                println!("{:?}", subdir.0.to_str().unwrap());
                build_paths(sess, subdir.0.to_str().unwrap()); //results in "infinite recursion"
            }

        }
    }
}

预期输出“找到文件!” (此后需要执行实际路径构建);但是,实际结果是该函数的无限递归。

0 个答案:

没有答案