SFTP создает новый каталог

Я использую SFTP для передачи файлов. Но во время процесса, если путь не существует, sftp создает каталог по умолчанию? Кто-нибудь, пожалуйста, объясните мне это

0
13.02.2017, 19:25
1 ответ

С клиентом OpenSSH sftp , если локальный путь команды 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 () в sftp-client.c , откуда мы попадаем из process_get () в sftp.c если используется флаг -r :

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

Мне это кажется логичным. Если вы хотите рекурсивно загружать файлы, вам не нужно вручную создавать структуру каталогов перед получением файлов.

2
28.01.2020, 02:34

Теги

Похожие вопросы