sftpを使ってディレクトリをアップロードしますか?

sftpを使ってディレクトリをアップロードしますか?

SFTPを介してディレクトリ(複数レベルの深さの他のディレクトリが含まれている)をアップロードする際にいくつかの問題があります。圧縮でこの問題を解決できることはわかりますが、なぜこれが必要なのかわかりません。

とにかく努力してみる

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を使用する必要がありますか?

答え1

sftpがなぜこれを行うのかはわかりませんが、ターゲットディレクトリがすでに存在する場合にのみ再帰的にコピーできます。だからこうしてください...

sftp> mkdir bin
sftp> put -r bin

答え2

修正済み:私は最初に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

より良い再帰実装のために、putPuTTYpsftpコマンドラインツールを使用できます。putty-toolsDebian(おそらくUbuntu)パッケージにあります。

あるいは、GUIを使用したい場合は、Filezillaが目的のアクションを実行します。

答え3

あなたはそれを使用することに興味があるかもしれませんrsync。その命令は

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

これにより、すべてのコンテンツがコピーされ、リモートbin/サーバーに保存されます/home/earlz/blah/bin/。追加ボーナスとして、まずリモート側のファイルが変更されていないことを確認し、変更されていない場合は再送信しません。さらに -z オプションを追加すると、自動的に圧縮されます。

答え4

圧縮しませんが、tarを含むかなり複雑な答えを提案できますか?

ここにあります:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

これにより、tar(-cf:=create file)、ファイル名 -(なし、stdout) を使用して ./bin ディレクトリを tar し、target.org (IP も可能) で ssh を実行します。ここで、コマンドの実行は引用符で囲みます。 :cd to blahとtar -xf(抽出ファイル) - 何もなく、名前もなく、単に標準入力です。

これは、自宅で小包を梱包して郵便局に持ち込み、職場に行き、小包があると予想される場所で開くのと同じです。

おそらくsftpを使用するよりもエレガントなソリューションがあるかもしれません。

関連情報