Sftp
SFTP 創建新目錄
我正在做 SFTP 來傳輸文件。但是在這個過程中,如果路徑不存在,sftp會預設創建一個目錄嗎?誰能給我解釋一下
使用 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; }
這在我看來是合乎邏輯的。如果要遞歸下載文件,則無需在獲取文件之前手動創建目錄結構。