SFTP 创建新目录

SFTP 创建新目录

我正在使用 SFTP 来传输文件。但是在这个过程中,如果路径不存在,sftp会默认创建一个目录吗?谁能向我解释一下吗

答案1

使用 OpenSSHsftp客户端时,如果命令的本地路径get包含不存在的目录,则会出现错误。

这是代码(请参阅do_download()中的函数sftp-client.c):

local_fd = open(local_path,
    O_WRONLY | O_CREAT | (resume_flag ? 0 : O_TRUNC), mode | S_IWUSR);
if (local_fd == -1) {
    error("Couldn't open local file \"%s\" for writing: %s",
        local_path, strerror(errno));
    goto fail;
}

如果该目录不存在,则不会尝试创建该目录。

测试这个:

sftp> lls hello
ls: hello: No such file or directory
Shell exited with status 1
sftp> get Documents/answers.txt hello/world
Fetching /home/kk/Documents/answers.txt to hello/world
Couldn't open local file "hello/world" for writing: No such file or directory
sftp> lls hello
ls: hello: No such file or directory
Shell exited with status 1
sftp>

如果sftp以相同的标志开始-r或者如果该get命令与相同的标志一起使用,则目标目录将要被创建。这是来自download_dir_internal()in 的位置,如果使用该标志,sftp-client.c我们最终会从process_get()in开始:sftp.c-r

if (mkdir(dst, mode) == -1 && errno != EEXIST) {
    error("mkdir %s: %s", dst, strerror(errno));
    return -1;
}

这对我来说似乎是合乎逻辑的。如果您想递归下载文件,则不需要在获取文件之前手动创建目录结构。

相关内容