sftp:フォルダーに含まれるすべてのファイル、ディレクトリ、およびサブディレクトリをアップロードします


27

マシンAIにはフォルダーがあります

/home/a/

マシンBIにはフォルダーがあります

/home/b/

/ home / bの/ home / aのすべてのファイル、ディレクトリ、サブディレクトリをsftpで転送したいマシンAIでコマンドを試しました:

sftp fibon82@machineB.com
put /home/a/* /home/b/

しかし、それは動作しません、私はエラーメッセージを取得します:「非正規ファイル/ home / a / a1をスキップ」... [a1はaのサブディレクトリです]
どうすればput命令を変更できますか?

ありがとう!:)

編集:

scpを使用して解決しました。

scp -r /home/a/ fibon82@machineB.com:/home/b/

2
put -rうまくいったでしょう。
脇美子

1
わかりましたが、「putコマンド」のオプション-rが使用可能であることをどのようにして知ることができますか?ここを見ると、フラグ-Pのみが記述されています... マニュアルでも同じです ありがとう!:)
fibon82

代わりに回答として投稿してください。
NN

はい。回答で質問を編集する代わりに、独自の質問に答えて受け入れる必要があります。

@ fibon82 OpenSSHの最新マニュアルsftpについては、OpenSSHプロジェクトを参照してください。
マーティンPrikryl 14

回答:


21

厳密にはsftpと同等ではありませんが、rsyncはscpとsftpの非常に強力な代替手段です。特に、マシンAからマシンBにコピーを更新する場合、変更されていないファイルをコピーしないためです。マシンAから削除されたファイルをマシンBから削除することもできます(もちろん指示された場合のみ)。

あなたの場合、構文は次のようになります

rsync -zrp /home/a/ user@remote.host.com:/home/b/

この-rオプションは、ファイルを再帰的にコピーするためのもの-zであり、転送中の圧縮を有効にし、コピー時に-pファイルのアクセス許可(ファイルの作成、編集など)を保持します。さらに多くのオプションが可能です。いつものように、manページを読んでください。


ああ、ありがとう!:)私が学んだ新しいこと!
fibon82

@ fibon82:どういたしまして:)
カロロス

1
コードを使用するだけで、1分で400MBのデータを同期できました。私はあなたにもそうでない場合、あなたは何が起こっているか知らなくても、何を見つめて(と:)どのような速度で)することがあります--progress使用する必要があります追加します
サンドロ・アントヌッチ

1
悲しいことにrsyncsftpプロトコルは話せません。だから、設定した場合sftp使用して-chrootのssh中でのビルドをinternal-sftp、次にrsync失敗します。
ティノ

17

ではsftp、このコマンドは再帰的にリモートのカレントディレクトリにカレントディレクトリの内容をアップロード:

 put -r .

をご覧くださいman sftp


この-rスイッチはOpenSSH 5.4以降でのみサポートされています。
マーティンPrikryl 14

1
-rスイッチはクライアント側のみ(sftpコマンドの一部)であることに注意してください。したがって、サーバー(ここでは受信側)にはOpenSSH 5.4は必要ありません。クライアントのみがそれをサポートする必要があります。
ティノ

9

scp(セキュアコピー)は、セキュアなトンネルを介してファイルを転送するためのLinuxの事実上の事実です。あなたの場合、あなたは再帰的なスイッチを使いたいでしょう、例えば:

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftpとscpは実際には異なるプロトコルであり、どちらもsshに基づいています。
パラドロイド

1
はい、サーバーがsftpプロトコルのみを許可している場合、この回答は機能しません。
рüффп

4

使用してみてください

put -r /home/a/ /home/b/

詳細については、こちらをご覧ください:これ


1
この-rスイッチはOpenSSH 5.4以降でのみサポートされています。
マーティンPrikryl 14

-rスイッチはクライアント側のみ(sftpコマンドの一部)であることに注意してください。したがって、サーバー(ここでは受信側)にはOpenSSH 5.4は必要ありません。クライアントのみがそれをサポートする必要があります。そして:これは、rsyncタグ付けされた質問への回答として(おそらくサポートされていない)を取得することsftpは少し混乱するので、受け入れられた答えなければなりません。
ティノ

0

実際、put -rは動作するはずです。ただし、リモートホストに宛先フォルダーが存在する必要があります。

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

あなたが述べたことを裏付ける参照と証拠を追加し、この回答が投稿の既存の回答のいずれかでまだ回答されていないことを確認しました。「コメントするには50の評判が必要な理由」を読んで、コメントを開始する方法を理解してください。
ピンプジュースIT

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.