Sftp

SFTP 創建新目錄

  • February 13, 2017

我正在做 SFTP 來傳輸文件。但是在這個過程中,如果路徑不存在,sftp會預設創建一個目錄嗎?誰能給我解釋一下

使用 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開始-rget命令使用相同的標誌,則將創建目標目錄。如果使用了標誌,這就是我們最終來自的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;
}

這在我看來是合乎邏輯的。如果要遞歸下載文件,則無需在獲取文件之前手動創建目錄結構。

引用自:https://unix.stackexchange.com/questions/344672