SFTP가 새 디렉터리를 생성합니다.

SFTP가 새 디렉터리를 생성합니다.

SFTP를 사용하여 파일을 전송하고 있습니다. 그런데 이 과정에서 해당 경로가 존재하지 않으면 sftp는 기본적으로 디렉토리를 생성하게 될까요? 누구든지 나에게 설명해 줄 수 있나요?

답변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()in의 위치입니다. 해당 플래그를 사용하면 in sftp-client.c에서 시작하게 됩니다 process_get().sftp.c-r

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

이것은 나에게 논리적인 것 같습니다. 파일을 재귀적으로 다운로드하려는 경우 파일을 가져오기 전에 디렉터리 구조를 수동으로 만들 필요가 없습니다.

관련 정보