Linux

用 sftp 上傳目錄?

  • March 15, 2022

我在通過 sftp 上傳目錄(包含其他幾級深的目錄)時遇到了一些問題。我意識到我可以通過 gzipping 解決這個問題,但我不明白為什麼這是必要的。

反正我試試

sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"

我認為最後一條錯誤消息是完全愚蠢的。所以目錄不存在?為什麼不創建目錄?

sftp是否有這個問題,或者我應該只使用scp?

更正:我最初錯誤地聲稱 OpenSSH 不支持put -r。確實如此,但它以一種非常奇怪的方式進行。似乎期望目標目錄已經存在,與源目錄同名。

sftp> put -r source
Uploading source/ to /home/myself/source
Couldn't canonicalize: No such file or directory
etc.
sftp> mkdir source
sftp> put -r source
Uploading source/ to /home/myself/source
Entering source/
source/file1
source/file2

特別奇怪的是,即使您為目的地指定不同的名稱,這也適用:

sftp> put -r source dest
Uploading source/ to /home/myself/dest
Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Entering source/
source/file1
source/file2

為了更好地實現 recursive put,您可以改用 PuTTYpsftp命令行工具。它位於putty-toolsDebian(很可能是 Ubuntu)下的軟體包中。

或者,如果你想使用 GUI,Filezilla 會做你想做的事。

我不知道為什麼 sftp 會這樣做,但如果目標目錄已經存在,您只能遞歸複製。所以這樣做…

sftp> mkdir bin
sftp> put -r bin

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