SFTP criando novo diretório

0

Estou fazendo SFTP para transferir arquivos. Mas durante o processo, se o caminho não existe, o sftp está criando um diretório por padrão? Alguém por favor pode explicar isso para mim

    
por piemesson 13.02.2017 / 18:25

1 resposta

2

Com o cliente OpenSSH sftp , se o caminho local do comando get contiver um diretório que não existe, você receberá um erro.

Este é o código (veja a função do_download() em 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;
}

Nenhuma tentativa é feita para criar o diretório, se ele não existir.

Testando isso:

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>

Se sftp for iniciado com -r ou se o comando get for usado com o mesmo sinalizador, o diretório de destino será criado. Isso é de download_dir_internal() in sftp-client.c , que é onde terminamos em process_get() in sftp.c se o sinalizador -r for usado:

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

Isso parece lógico para mim. Se você quiser baixar arquivos de forma recursiva, não será necessário criar manualmente a estrutura de diretórios antes de obter os arquivos.

    
por 13.02.2017 / 19:32