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
より良い再帰実装のために、put
PuTTYpsftp
コマンドラインツールを使用できます。putty-tools
Debian(おそらく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を使用するよりもエレガントなソリューションがあるかもしれません。